Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ public List<PollStaticsDto> countStaticsByPollOptionIds(List<Long> pollOptionIds
.fetch();
return tuples.stream()
.map(t -> {
String gender = t.get(1, String.class);
Member.Gender genderEnum = t.get(1, Member.Gender.class);
String gender = genderEnum != null ? genderEnum.name() : "기타";
Integer age = t.get(2, Integer.class);
String ageGroup = getAgeGroup(age);
Long voteCount = t.get(3, Long.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public interface PollService {
PollDto updatePoll(Long pollId, PollUpdateDto pollUpdateDto, Long memberId);
void patchUpdatePoll(Long pollId, PollUpdateDto pollUpdateDto);
void closePoll(Long pollId);
void deletePoll(Long pollId, Long memberId);
void deletePoll(Long pollId, Long memberId);

// ===== 검증 관련 =====
void validatePollCreate(PollCreateDto dto);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,15 @@ public ResponseEntity<ApiResponse<Void>> deletePost(@PathVariable Long postId) {
return ResponseEntity.ok(new ApiResponse<>(200, "게시글이 삭제되었습니다.", null));
}

@Operation(summary = "게시글 삭제(관리자)")
@DeleteMapping("/admin/{postId}")
public ResponseEntity<ApiResponse<Void>> deletePostAdmin(@PathVariable Long postId) {
//AuthUtil.validateAdmin(); 관리자
AuthUtil.getAuthenticatedMemberId(); // 모든 유저
postService.deletePostAdmin(postId);
return ResponseEntity.ok(new ApiResponse<>(200, "게시글이 삭제되었습니다.", null));
}

@ExceptionHandler(ResponseStatusException.class)
public ResponseEntity<ApiResponse<Void>> handleResponseStatusException(ResponseStatusException ex) {
int code = ex.getStatusCode().value();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public interface PostService {
PostDto updatePost(Long postId, PostUpdateDto postUpdateDto);
void patchUpdatePost(Long postId, PostUpdateDto postUpdateDto);
void deletePost(Long postId);
void deletePostAdmin(Long postId);
PostDetailDto createPostWithPoll(PostWithPollCreateDto dto, Long memberId);

// ===== 본인 게시글 관련 =====
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ public PostDetailDto getPostById(Long postId) {
public List<PostDto> getPostsByMemberId(Long memberId) {
Member member = AuthUtil.getMemberOrThrow(memberId);
List<Post> posts = postRepository.findByMember(member);
if (posts.isEmpty()) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "해당 회원의 게시글이 없습니다.");
}
// if (posts.isEmpty()) {
// throw new ResponseStatusException(HttpStatus.NOT_FOUND, "해당 회원의 게시글이 없습니다.");
// }
return posts.stream()
.sorted(Comparator.comparing(Post::getUpdatedAt, Comparator.nullsLast(Comparator.naturalOrder())).reversed()) // 최신순 정렬
.map(post -> convertToDto(post, memberId))
Expand Down Expand Up @@ -145,6 +145,13 @@ public void deletePost(Long postId) {
postRepository.delete(post);
}

@Override
public void deletePostAdmin(Long postId) {
Post post = postRepository.findById(postId)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "삭제할 게시글을 찾을 수 없습니다."));
postRepository.delete(post);
}

@Override
public List<PostDetailDto> getAllPosts(Long memberId) {
return postRepository.findAll().stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,12 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic
member = createOAuth2Member(userInfo);
} else {
// 기존 OAuth2 회원 로그인
log.info("기존 OAuth2 사용자 로그인: email={}, provider={}", userInfo.getEmail(), registrationId);
log.info("기존 OAuth2 사용자 로그인: email={}, provider={}, memberId={}", userInfo.getEmail(), registrationId, member.getMemberId());
}

oauth2MemberRepository.save(member);
// 엔티티를 저장하고 영속화된 엔티티를 반환받아야 memberId가 할당됨
member = oauth2MemberRepository.save(member);
log.info("OAuth2 회원 저장 완료: memberId={}, loginId={}", member.getMemberId(), member.getLoginId());

// OAuth2 provider의 access token을 Redis에 저장 (연동 해제용)
saveOAuth2ProviderAccessToken(userInfo.getEmail(), accessToken);
Expand Down