Skip to content

Commit 552140a

Browse files
author
EpicFn
committed
feat : 구현 완료
1 parent 2cf1be6 commit 552140a

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

src/main/java/org/tuna/zoopzoop/backend/domain/space/space/controller/ApiV1SpaceController.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.springframework.web.bind.annotation.*;
1313
import org.springframework.web.multipart.MultipartFile;
1414
import org.tuna.zoopzoop.backend.domain.member.entity.Member;
15+
import org.tuna.zoopzoop.backend.domain.space.membership.dto.etc.SpaceMemberInfo;
1516
import org.tuna.zoopzoop.backend.domain.space.membership.entity.Membership;
1617
import org.tuna.zoopzoop.backend.domain.space.membership.enums.Authority;
1718
import org.tuna.zoopzoop.backend.domain.space.membership.enums.JoinState;
@@ -27,6 +28,8 @@
2728
import org.tuna.zoopzoop.backend.global.security.jwt.CustomUserDetails;
2829

2930
import java.nio.file.AccessDeniedException;
31+
import java.util.List;
32+
import java.util.stream.Collectors;
3033

3134
@RestController
3235
@RequestMapping("/api/v1/space")
@@ -126,6 +129,7 @@ public RsData<Void> updateSpaceThumbnail(
126129
public RsData<ResBodyForSpaceListPage> getAllSpaces(
127130
@AuthenticationPrincipal CustomUserDetails userDetails,
128131
@RequestParam(required = false) JoinState state,
132+
@RequestParam(defaultValue = "false") boolean includeMembers,
129133
@PageableDefault(size = 10, sort = "createDate", direction = Sort.Direction.DESC) Pageable pageable
130134
) {
131135
// 현재 로그인한 사용자 정보 가져오기
@@ -136,13 +140,32 @@ public RsData<ResBodyForSpaceListPage> getAllSpaces(
136140
Page<Membership> membershipsPage = membershipService.findByMember(member, stateStr, pageable);
137141

138142
// Page<Membership>를 Page<SpaceMembershipInfo>로 변환
139-
// Page 객체의 map() 메서드를 사용하면 페이징 정보는 그대로 유지하면서 내용물만 쉽게 바꿀 수 있습니다.
140-
Page<SpaceInfo> spaceInfosPage = membershipsPage.map(membership -> new SpaceInfo(
141-
membership.getSpace().getId(),
142-
membership.getSpace().getName(),
143-
membership.getSpace().getThumbnailUrl(),
144-
membership.getAuthority()
145-
));
143+
Page<SpaceInfo> spaceInfosPage = membershipsPage.map(membership -> {
144+
Space space = membership.getSpace();
145+
List<SpaceMemberInfo> memberInfos = null;
146+
147+
if (includeMembers) {
148+
// 스페이스에 속한 멤버 목록 조회 (가입 상태만)
149+
List<Membership> spaceMemberships = membershipService.findMembersBySpace(space);
150+
// 멤버 목록을 DTO로 변환
151+
memberInfos = spaceMemberships.stream()
152+
.map(spaceMembership -> new SpaceMemberInfo(
153+
spaceMembership.getMember().getId(),
154+
spaceMembership.getMember().getName(),
155+
spaceMembership.getMember().getProfileImageUrl(),
156+
spaceMembership.getAuthority()
157+
))
158+
.collect(Collectors.toList());
159+
}
160+
161+
return new SpaceInfo(
162+
space.getId(),
163+
space.getName(),
164+
space.getThumbnailUrl(),
165+
membership.getAuthority(),
166+
memberInfos // 조회된 멤버 목록 (null일 수도 있음)
167+
);
168+
});
146169

147170
// 새로운 응답 DTO 생성
148171
ResBodyForSpaceListPage resBody = new ResBodyForSpaceListPage(spaceInfosPage);
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package org.tuna.zoopzoop.backend.domain.space.space.dto.etc;
22

3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import org.tuna.zoopzoop.backend.domain.space.membership.dto.etc.SpaceMemberInfo;
35
import org.tuna.zoopzoop.backend.domain.space.membership.enums.Authority;
46

7+
import java.util.List;
8+
9+
@JsonInclude(JsonInclude.Include.NON_NULL)
510
public record SpaceInfo(
611
Integer id,
712
String name,
813
String thumbnailUrl,
9-
Authority authority
14+
Authority authority,
15+
List<SpaceMemberInfo> members
1016
) {
17+
public SpaceInfo(Integer id, String name, String thumbnailUrl, Authority authority) {
18+
this(id, name, thumbnailUrl, authority, null);
19+
}
1120
}

0 commit comments

Comments
 (0)