[회원 목록 조회 기능 추가] 회원 목록을 조회하는 API를 구현하고, GetMemberResponseDto를 추가하여 민감 정보를 제외한 회원 정보를 안전하게 반환하도록 수정. MemberService 및 MemberMapper에 관련 메서드를 추가하여 기능을 완성함.
This commit is contained in:
@@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import com.bio.bio_backend.domain.base.member.dto.MemberDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.GetMemberResponseDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.CreateMemberRequestDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.CreateMemberResponseDto;
|
||||
import com.bio.bio_backend.domain.base.member.service.MemberService;
|
||||
@@ -25,6 +26,9 @@ import com.bio.bio_backend.global.utils.SecurityUtils;
|
||||
import com.bio.bio_backend.global.utils.JwtUtils;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Tag(name = "Member", description = "회원 관련 API")
|
||||
@RestController
|
||||
@@ -53,21 +57,38 @@ public class MemberController {
|
||||
return ResponseEntity.status(HttpStatus.CREATED).body(apiResponse);
|
||||
}
|
||||
|
||||
@LogExecution("회원 목록 조회")
|
||||
@Operation(summary = "회원 목록 조회", description = "활성화된 모든 회원의 목록을 조회합니다.")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "회원 목록 조회 성공")
|
||||
})
|
||||
@GetMapping
|
||||
public ResponseEntity<ApiResponseDto<List<GetMemberResponseDto>>> getMembers() {
|
||||
try {
|
||||
List<GetMemberResponseDto> members = memberService.selectMemberListForDisplay(new HashMap<>());
|
||||
ApiResponseDto<List<GetMemberResponseDto>> apiResponse = ApiResponseDto.success(ApiResponseCode.COMMON_SUCCESS, members);
|
||||
log.info("전체 회원 목록 조회 완료: {}명", members.size());
|
||||
|
||||
return ResponseEntity.ok(apiResponse);
|
||||
} catch (Exception e) {
|
||||
log.error("회원 목록 조회 중 오류 발생: {}", e.getMessage());
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||
.body(ApiResponseDto.fail(ApiResponseCode.COMMON_INTERNAL_SERVER_ERROR));
|
||||
}
|
||||
}
|
||||
|
||||
@LogExecution("로그아웃")
|
||||
@Operation(summary = "로그아웃", description = "사용자 로그아웃을 처리합니다.")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "로그아웃 성공"),
|
||||
@ApiResponse(responseCode = "401", description = "인증 실패", content = @Content(schema = @Schema(implementation = ApiResponseDto.class)))
|
||||
@ApiResponse(responseCode = "200", description = "로그아웃 성공")
|
||||
})
|
||||
@PostMapping("/logout")
|
||||
public ResponseEntity<ApiResponseDto<Void>> logout(HttpServletResponse response) {
|
||||
try {
|
||||
String userId = SecurityUtils.getCurrentUserId();
|
||||
memberService.deleteRefreshToken(userId);
|
||||
|
||||
// 모든 토큰 쿠키 삭제
|
||||
jwtUtils.deleteAllTokenCookies(response);
|
||||
|
||||
log.info("사용자 로그아웃 완료: {}", userId);
|
||||
|
||||
return ResponseEntity.ok(ApiResponseDto.success(ApiResponseCode.COMMON_SUCCESS));
|
||||
|
@@ -0,0 +1,28 @@
|
||||
package com.bio.bio_backend.domain.base.member.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 회원 조회용 Response DTO
|
||||
* 민감한 정보(password, refreshToken, loginIp)는 제외하고 안전한 정보만 포함
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class GetMemberResponseDto {
|
||||
|
||||
private Long oid;
|
||||
private String userId;
|
||||
private String name;
|
||||
private String email;
|
||||
private Boolean useFlag;
|
||||
private LocalDateTime lastLoginAt;
|
||||
private LocalDateTime createdAt;
|
||||
private LocalDateTime updatedAt;
|
||||
}
|
@@ -4,6 +4,7 @@ import com.bio.bio_backend.domain.base.member.dto.CreateMemberRequestDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.CreateMemberResponseDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.LoginResponseDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.MemberDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.GetMemberResponseDto;
|
||||
import com.bio.bio_backend.domain.base.member.entity.Member;
|
||||
import com.bio.bio_backend.global.annotation.IgnoreBaseEntityMapping;
|
||||
import com.bio.bio_backend.global.config.GlobalMapperConfig;
|
||||
@@ -57,4 +58,14 @@ public interface MemberMapper {
|
||||
* MemberDto를 LoginResponseDto로 변환
|
||||
*/
|
||||
LoginResponseDto toLoginResponseDto(MemberDto memberDto);
|
||||
|
||||
/**
|
||||
* Member 엔티티를 GetMemberResponseDto로 변환 (민감한 정보 제외)
|
||||
*/
|
||||
GetMemberResponseDto toGetMemberResponseDto(Member member);
|
||||
|
||||
/**
|
||||
* Member 엔티티 리스트를 GetMemberResponseDto 리스트로 변환 (민감한 정보 제외)
|
||||
*/
|
||||
List<GetMemberResponseDto> toGetMemberResponseDtoList(List<Member> members);
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
|
||||
import com.bio.bio_backend.domain.base.member.dto.MemberDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.GetMemberResponseDto;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -21,4 +22,11 @@ public interface MemberService extends UserDetailsService {
|
||||
void updateMember(MemberDto member);
|
||||
|
||||
List<MemberDto> selectMemberList(Map<String, String> params);
|
||||
|
||||
/**
|
||||
* 회원 목록 조회 (민감한 정보 제외)
|
||||
* @param params 검색 파라미터
|
||||
* @return GetMemberResponseDto 리스트
|
||||
*/
|
||||
List<GetMemberResponseDto> selectMemberListForDisplay(Map<String, String> params);
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package com.bio.bio_backend.domain.base.member.service;
|
||||
|
||||
import com.bio.bio_backend.domain.base.member.dto.MemberDto;
|
||||
import com.bio.bio_backend.domain.base.member.dto.GetMemberResponseDto;
|
||||
import com.bio.bio_backend.domain.base.member.entity.Member;
|
||||
import com.bio.bio_backend.domain.base.member.mapper.MemberMapper;
|
||||
import com.bio.bio_backend.domain.base.member.repository.MemberRepository;
|
||||
@@ -95,4 +96,11 @@ public class MemberServiceImpl implements MemberService {
|
||||
|
||||
return memberMapper.toMemberDtoList(members);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GetMemberResponseDto> selectMemberListForDisplay(Map<String, String> params) {
|
||||
List<Member> members = memberRepository.findByUseFlagTrue();
|
||||
|
||||
return memberMapper.toGetMemberResponseDtoList(members);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user