1212import org .springframework .web .bind .annotation .*;
1313import org .springframework .web .multipart .MultipartFile ;
1414import org .tuna .zoopzoop .backend .domain .member .entity .Member ;
15+ import org .tuna .zoopzoop .backend .domain .space .membership .dto .etc .SpaceMemberInfo ;
1516import org .tuna .zoopzoop .backend .domain .space .membership .entity .Membership ;
1617import org .tuna .zoopzoop .backend .domain .space .membership .enums .Authority ;
1718import org .tuna .zoopzoop .backend .domain .space .membership .enums .JoinState ;
2728import org .tuna .zoopzoop .backend .global .security .jwt .CustomUserDetails ;
2829
2930import 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 );
0 commit comments