diff --git a/src/main/java/org/fastcampus/jober/space/controller/SpaceMemberController.java b/src/main/java/org/fastcampus/jober/space/controller/SpaceMemberController.java index e05f089..a0b528c 100644 --- a/src/main/java/org/fastcampus/jober/space/controller/SpaceMemberController.java +++ b/src/main/java/org/fastcampus/jober/space/controller/SpaceMemberController.java @@ -11,6 +11,7 @@ import org.fastcampus.jober.space.dto.request.MemberUpdateRequestDto; import org.fastcampus.jober.space.dto.request.SpaceMemberAddRequestDto; import org.fastcampus.jober.space.dto.response.MemberUpdateResponseDto; +import org.fastcampus.jober.space.dto.response.SpaceMemberListResponseDto; import org.fastcampus.jober.user.dto.CustomUserDetails; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -74,17 +75,14 @@ public ResponseEntity acceptInvitation( @Operation(summary = "스페이스 멤버 조회", description = "특정 spaceId에 속한 모든 멤버 정보를 가져옵니다.") @Parameter(name = "spaceId", description = "멤버를 조회할 스페이스의 ID", required = true) @GetMapping("/{spaceId}/members") - public ResponseEntity> getSpaceMembers(@PathVariable Long spaceId) { - List result = spaceMemberService.getSpaceMembers(spaceId); + public ResponseEntity> getSpaceMembers(@PathVariable Long spaceId) { + List result = spaceMemberService.getSpaceMembers(spaceId); return ResponseEntity.ok(result); } @Operation( summary = "스페이스 멤버 논리 삭제", - description = """ - - 특정 스페이스에서 여러 멤버를 논리 삭제합니다. - `memberIds` : 삭제할 멤버 ID들의 리스트(예: `1,2,3`) - `spaceId` : 해당 스페이스 ID """, @@ -154,7 +152,7 @@ public ResponseEntity updateSpaceMember( @ApiResponse(responseCode = "403", description = "해당 스페이스 멤버가 아님") }) @GetMapping("/{spaceId}/tag") - public ResponseEntity> getMemberByTag( + public ResponseEntity> getMemberByTag( @Parameter(description = "조회할 스페이스 ID", required = true) @PathVariable Long spaceId, @Parameter(description = "조회할 멤버의 태그", required = true) @@ -162,7 +160,7 @@ public ResponseEntity> getMemberByTag( @Parameter(hidden = true) @AuthenticationPrincipal CustomUserDetails principal ) { - List result = spaceMemberService.getMemberByTag(spaceId, tag, principal.getUserId()); + List result = spaceMemberService.getMemberByTag(spaceId, tag, principal.getUserId()); return ResponseEntity.ok(result); } } diff --git a/src/main/java/org/fastcampus/jober/space/dto/response/SpaceMemberListResponseDto.java b/src/main/java/org/fastcampus/jober/space/dto/response/SpaceMemberListResponseDto.java new file mode 100644 index 0000000..20abfec --- /dev/null +++ b/src/main/java/org/fastcampus/jober/space/dto/response/SpaceMemberListResponseDto.java @@ -0,0 +1,26 @@ +package org.fastcampus.jober.space.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.fastcampus.jober.space.entity.Authority; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class SpaceMemberListResponseDto { + @Schema(description = "구성원 이름", example = "홍길동") + private String name; + + @Schema(description = "구성원 이메일", example = "aaa@aaa.com") + private String email; + + @Schema(description = "구성원 권한", example = "ADMIN") + private Authority authority; + + @Schema(description = "구성원 태그", example = "마케팅팀") + private String tag; +} diff --git a/src/main/java/org/fastcampus/jober/space/mapper/SpaceMemberMapper.java b/src/main/java/org/fastcampus/jober/space/mapper/SpaceMemberMapper.java index a6a6355..d651166 100644 --- a/src/main/java/org/fastcampus/jober/space/mapper/SpaceMemberMapper.java +++ b/src/main/java/org/fastcampus/jober/space/mapper/SpaceMemberMapper.java @@ -3,13 +3,14 @@ import java.util.List; import org.fastcampus.jober.space.dto.response.MemberUpdateResponseDto; +import org.fastcampus.jober.space.dto.response.SpaceMemberListResponseDto; +import org.fastcampus.jober.space.dto.response.SpaceMemberResponseDto; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.NullValuePropertyMappingStrategy; import org.mapstruct.factory.Mappers; import org.fastcampus.jober.space.dto.request.SpaceMemberRequestDto; -import org.fastcampus.jober.space.dto.response.SpaceMemberResponseDto; import org.fastcampus.jober.space.entity.Space; import org.fastcampus.jober.space.entity.SpaceMember; import org.fastcampus.jober.user.entity.Users; @@ -22,10 +23,15 @@ public interface SpaceMemberMapper { MemberUpdateResponseDto toMemberUpdateResponseDto(SpaceMember member); + @Mapping(source = "user.name", target = "name") + @Mapping(source = "user.email", target = "email") + SpaceMemberListResponseDto toMemberResponseDto(SpaceMember member); + + List toMemberResponseDtoList(List spaceMembers); + @Mapping(source = "user.userId", target = "userId") SpaceMemberResponseDto toResponseDto(SpaceMember member); - - List toResponseDtoList(List spaceMembers); + List toResponseDtoList(List member); @Mapping( target = "space", diff --git a/src/main/java/org/fastcampus/jober/space/service/SpaceMemberService.java b/src/main/java/org/fastcampus/jober/space/service/SpaceMemberService.java index 69e8613..a2e17a3 100644 --- a/src/main/java/org/fastcampus/jober/space/service/SpaceMemberService.java +++ b/src/main/java/org/fastcampus/jober/space/service/SpaceMemberService.java @@ -12,6 +12,7 @@ import org.fastcampus.jober.space.dto.InviteStatus; import org.fastcampus.jober.space.dto.request.MemberUpdateRequestDto; import org.fastcampus.jober.space.dto.response.MemberUpdateResponseDto; +import org.fastcampus.jober.space.dto.response.SpaceMemberListResponseDto; import org.fastcampus.jober.space.entity.*; import org.fastcampus.jober.space.repository.InviteStatusRepository; import org.fastcampus.jober.space.repository.SpaceRepository; @@ -24,7 +25,6 @@ import lombok.RequiredArgsConstructor; import org.fastcampus.jober.space.dto.request.SpaceMemberAddRequestDto; -import org.fastcampus.jober.space.dto.response.SpaceMemberResponseDto; import org.fastcampus.jober.space.mapper.SpaceMemberMapper; import org.fastcampus.jober.space.repository.SpaceMemberRepository; import org.springframework.transaction.annotation.Transactional; @@ -140,9 +140,9 @@ public void processSpaceInvitation(Long spaceId, String email, Users user) { spaceMemberRepository.save(spaceMember); } - public List getSpaceMembers(Long spaceId) { + public List getSpaceMembers(Long spaceId) { List spaceMembers = spaceMemberRepository.findBySpaceId(spaceId); - return spaceMemberMapper.toResponseDtoList(spaceMembers); + return spaceMemberMapper.toMemberResponseDtoList(spaceMembers); } @Transactional @@ -172,14 +172,14 @@ public MemberUpdateResponseDto updateMember(Long memberId, Long spaceId, MemberU return spaceMemberMapper.toMemberUpdateResponseDto(member); } - public List getMemberByTag(Long spaceId, String tag, Long userId) { + public List getMemberByTag(Long spaceId, String tag, Long userId) { spaceRepository.findByIdOrThrow(spaceId); spaceMemberRepository.findBySpaceIdAndUserId(spaceId, userId) .orElseThrow(() -> new BusinessException(ErrorCode.FORBIDDEN, "해당 스페이스 멤버만 조회할 수 있습니다.")); List members = spaceMemberRepository.findBySpaceIdAndTag(spaceId, tag); - return spaceMemberMapper.toResponseDtoList(members); + return spaceMemberMapper.toMemberResponseDtoList(members); } }