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..6afdb6e7 100644 --- a/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java +++ b/src/main/java/project/flipnote/group/repository/GroupRepositoryCustom.java @@ -9,4 +9,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..65177c55 100644 --- a/src/main/java/project/flipnote/group/service/GroupService.java +++ b/src/main/java/project/flipnote/group/service/GroupService.java @@ -461,4 +461,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); + } }