From a45d1f75b88b46b631556a0fb845f5c7d1076951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Fri, 21 Nov 2025 21:53:13 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Feat:=20=EB=82=B4=EA=B0=80=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=9C=20=EA=B7=B8=EB=A3=B9=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/controller/GroupController.java | 11 ++++++ .../repository/GroupRepositoryCustom.java | 4 ++ .../group/repository/GroupRepositoryImpl.java | 38 +++++++++++++++++++ .../flipnote/group/service/GroupService.java | 16 ++++++++ 4 files changed, 69 insertions(+) diff --git a/src/main/java/project/flipnote/group/controller/GroupController.java b/src/main/java/project/flipnote/group/controller/GroupController.java index 561cc1fc..f94e15aa 100644 --- a/src/main/java/project/flipnote/group/controller/GroupController.java +++ b/src/main/java/project/flipnote/group/controller/GroupController.java @@ -106,4 +106,15 @@ public ResponseEntity> findMyGroup( return ResponseEntity.ok(res); } + + //내가 생성한 그룹 전체 조회 + @GetMapping("/created") + public ResponseEntity> findCreatedGroup( + @AuthenticationPrincipal AuthPrinciple authPrinciple, + @Valid @ModelAttribute GroupListRequest req + ) { + CursorPagingResponse res = groupService.findCreatedGroup(authPrinciple, req); + + return ResponseEntity.ok(res); + } } diff --git a/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java b/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java index 22decba9..ee1537af 100644 --- a/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java +++ b/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java @@ -2,6 +2,8 @@ import java.util.List; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import project.flipnote.group.entity.Category; import project.flipnote.group.model.GroupInfo; @@ -9,4 +11,6 @@ public interface GroupRepositoryCustom { List findAllByCursor(Long lastId, Category category, int pageSize); List findAllByCursorAndUserId(Long lastId, Category category, int pageSize, Long userId); + + List findAllByCursorAndCreatedUserId(Long cursorId, Category category, int size, Long id); } diff --git a/src/main/java/project/flipnote/group/repository/GroupRepositoryImpl.java b/src/main/java/project/flipnote/group/repository/GroupRepositoryImpl.java index 6f2fdd11..293dc6f3 100644 --- a/src/main/java/project/flipnote/group/repository/GroupRepositoryImpl.java +++ b/src/main/java/project/flipnote/group/repository/GroupRepositoryImpl.java @@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor; import project.flipnote.group.entity.Category; +import project.flipnote.group.entity.GroupMemberRole; import project.flipnote.group.entity.QGroup; import project.flipnote.group.entity.QGroupMember; import project.flipnote.group.model.GroupInfo; @@ -90,4 +91,41 @@ public List findAllByCursorAndUserId(Long lastId, Category category, .fetch(); } + /** + * 그룹 테이블에 생성한 유저 추가? + * @param lastId + * @param category + * @param pageSize + * @param userId + * @return + */ + @Override + public List findAllByCursorAndCreatedUserId(Long lastId, Category category, int pageSize, Long userId) { + return queryFactory + .select(Projections.constructor( + GroupInfo.class, + group.id, + group.name, + group.description, + group.category, + group.imageUrl, + imageRef.id + )) + .from(group) + .join(groupMember).on(groupMember.group.eq(group)) + .where( + group.deletedAt.isNull(), + groupMember.user.id.eq(userId), + groupMember.role.eq(GroupMemberRole.OWNER), + lastId != null ? group.id.lt(lastId) : null, + category != null ? group.category.eq(category) : null + ) + .leftJoin(imageRef) + .on(imageRef.referenceType.eq(ReferenceType.GROUP) + .and(imageRef.referenceId.eq(group.id))) + .orderBy(group.id.desc()) + .limit(pageSize + 1) + .fetch(); + } + } diff --git a/src/main/java/project/flipnote/group/service/GroupService.java b/src/main/java/project/flipnote/group/service/GroupService.java index 6479921a..7b03481b 100644 --- a/src/main/java/project/flipnote/group/service/GroupService.java +++ b/src/main/java/project/flipnote/group/service/GroupService.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import project.flipnote.common.exception.BizException; @@ -461,4 +462,19 @@ private CursorPagingResponse createGroupInfoCursorPagingResponse(Grou return CursorPagingResponse.of(groups, hasNext, nextCursor); } + + //리팩토링 + public CursorPagingResponse findCreatedGroup(AuthPrinciple authPrinciple, GroupListRequest req) { + //1. 유저 가져오기 + UserProfile user = getUser(authPrinciple); + + //2. 카테고리 변환 + Category category = convertCategory(req.getCategory()); + + List groups = groupRepository.findAllByCursorAndCreatedUserId(req.getCursorId(), category, req.getSize(), + user.getId()); + + + return createGroupInfoCursorPagingResponse(req, groups); + } } From c16d5b3cad9134388f2e309adaa52d824cbe016d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9D=EB=B2=94?= Date: Sat, 22 Nov 2025 17:31:16 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Chore:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20import=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flipnote/group/repository/GroupRepositoryCustom.java | 2 -- src/main/java/project/flipnote/group/service/GroupService.java | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java b/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java index ee1537af..6afdb6e7 100644 --- a/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java +++ b/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java @@ -2,8 +2,6 @@ import java.util.List; -import jakarta.validation.constraints.Max; -import jakarta.validation.constraints.Min; import project.flipnote.group.entity.Category; import project.flipnote.group.model.GroupInfo; diff --git a/src/main/java/project/flipnote/group/service/GroupService.java b/src/main/java/project/flipnote/group/service/GroupService.java index 7b03481b..65177c55 100644 --- a/src/main/java/project/flipnote/group/service/GroupService.java +++ b/src/main/java/project/flipnote/group/service/GroupService.java @@ -11,7 +11,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import project.flipnote.common.exception.BizException;