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
15 changes: 0 additions & 15 deletions refrigerator/.idea/modules/refrigerator.main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ public class Follow {
@Column(name = "follow_pk")
private long followPk;

@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "follower")
private User follower;

@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "following")
private User following;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.hibernate.annotations.CreationTimestamp;

import java.time.LocalDate;
import java.util.List;

@Entity
@Table(name = "tbl_user")
Expand Down Expand Up @@ -33,4 +34,10 @@ public class User {

@Column(name = "user_role")
private String userRole = "ROLE_USER";

@OneToMany(mappedBy = "follower", cascade = CascadeType.REMOVE)
private List<Follow> following;

@OneToMany(mappedBy = "following", cascade = CascadeType.REMOVE)
private List<Follow> followers;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package moja.refrigerator.controller.user;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import moja.refrigerator.dto.user.request.PasswordResetRequest;
import moja.refrigerator.dto.user.request.PasswordUpdateRequest;
import moja.refrigerator.dto.user.request.UserCreateRequest;
Expand Down Expand Up @@ -60,4 +62,11 @@ public ResponseEntity<?> toggleFollow(@PathVariable Long userPk) {
followService.toggleFollow(userPk);
return ResponseEntity.ok().body("팔로우 상태가 변경되었습니다.");
}

// 회원 탈퇴
@PostMapping("/delete")
public ResponseEntity<?> delete(HttpServletRequest request, HttpServletResponse response) {
userService.deleteUser(request, response);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package moja.refrigerator.service.user;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import moja.refrigerator.dto.user.request.PasswordResetRequest;
import moja.refrigerator.dto.user.request.PasswordUpdateRequest;
import moja.refrigerator.dto.user.request.UserCreateRequest;
Expand All @@ -10,4 +12,5 @@ public interface UserService {
void updateUser(UserUpdateRequest request);
void resetPassword(PasswordResetRequest request);
void updatePassword(PasswordUpdateRequest request);
void deleteUser(HttpServletRequest request, HttpServletResponse response);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package moja.refrigerator.service.user;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import moja.refrigerator.aggregate.user.User;
import moja.refrigerator.dto.user.request.PasswordResetRequest;
import moja.refrigerator.dto.user.request.PasswordUpdateRequest;
import moja.refrigerator.dto.user.request.UserCreateRequest;
import moja.refrigerator.dto.user.request.UserUpdateRequest;
import moja.refrigerator.exception.user.DuplicateUserException;
import moja.refrigerator.jwt.LogoutFilter;
import moja.refrigerator.repository.user.UserRepository;
import moja.refrigerator.service.email.EmailService;
import org.modelmapper.ModelMapper;
Expand All @@ -28,6 +31,7 @@ public class UserServiceImpl implements UserService {
private final BCryptPasswordEncoder passwordEncoder;
private final ModelMapper modelMapper;
private final EmailService emailService;
private final LogoutFilter logoutFilter;

@Override
@Transactional
Expand Down Expand Up @@ -114,6 +118,22 @@ public void updatePassword(PasswordUpdateRequest request) {
user.setUserPw(passwordEncoder.encode(request.getNewPw()));
}

@Override
@Transactional
public void deleteUser(HttpServletRequest request, HttpServletResponse response) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String userId = authentication.getName();

User user = userRepository.findByUserId(userId)
.orElseThrow(() -> new UsernameNotFoundException("사용자를 찾을 수 없습니다."));

// 유저 삭제
userRepository.delete(user);

// 로그아웃 처리 (토큰 블랙리스트에 추가)
logoutFilter.logout(request, response, authentication);
}

private void checkDuplicateUser(UserCreateRequest request) {
List<String> errors = new ArrayList<>();
if (userRepository.existsByUserId(request.getUserId())) {
Expand Down