Skip to content

Commit f1623df

Browse files
authored
[BACKEND] 유저 회원 탈퇴 및 회원 전체 삭제 기능 추가 (#51)
## 📝작업 내용 >회원 탈퇴 DELETE /users 회원 전체 삭제 DELETE /users/all, 인증 불필요 (추후에 관리자만 가능하도록 변경 예정)
1 parent e160e57 commit f1623df

File tree

4 files changed

+30
-3
lines changed

4 files changed

+30
-3
lines changed

backend/src/main/java/com/cmg/comtogether/common/config/SwaggerConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public OpenAPI openAPI() {
3636
@Bean
3737
public OpenApiCustomizer oauthSecurityIgnoreCustomizer() {
3838
return openApi -> openApi.getPaths().forEach((path, pathItem) -> {
39-
if (path.startsWith("/oauth") || path.startsWith("/refresh")) {
39+
if (path.startsWith("/oauth") || path.startsWith("/refresh") || path.startsWith("/users/all")) {
4040
pathItem.readOperations().forEach(operation -> operation.setSecurity(Collections.emptyList()));
4141
}
4242
});

backend/src/main/java/com/cmg/comtogether/common/security/config/SecurityConfig.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1414
import org.springframework.security.crypto.password.PasswordEncoder;
1515
import org.springframework.security.web.SecurityFilterChain;
16+
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
1617
import org.springframework.web.cors.CorsConfigurationSource;
1718

1819
@Configuration
@@ -38,15 +39,16 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http, CorsConfigurat
3839
"/refresh/**",
3940
"/swagger-ui/**",
4041
"/v3/api-docs/**",
41-
"/products/**"
42+
"/products/**",
43+
"/users/all"
4244
).permitAll()
4345
.anyRequest().authenticated()
4446
)
4547
.exceptionHandling(ex -> ex
4648
.authenticationEntryPoint(authenticationEntryPoint)
4749
.accessDeniedHandler(accessDeniedHandler)
4850
)
49-
.addFilterBefore(jwtAuthenticationFilter, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.class);;
51+
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);;
5052

5153
return http.build();
5254
}

backend/src/main/java/com/cmg/comtogether/user/controller/UserController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,16 @@ public ResponseEntity<ApiResponse<UserResponseDto>> initializeUser(
4343
UserResponseDto userResponseDto = userService.initializeUser(userDetails.getUser().getUserId(), request);
4444
return ResponseEntity.ok(ApiResponse.success(userResponseDto));
4545
}
46+
47+
@DeleteMapping
48+
public ResponseEntity<ApiResponse<Void>> deleteUser(@AuthenticationPrincipal CustomUserDetails userDetails) {
49+
userService.deleteUser(userDetails.getUser());
50+
return ResponseEntity.ok(ApiResponse.success(null));
51+
}
52+
53+
@DeleteMapping("/all")
54+
public ResponseEntity<ApiResponse<Void>> deleteAllUser() {
55+
userService.deleteAllUsers();
56+
return ResponseEntity.ok(ApiResponse.success(null));
57+
}
4658
}

backend/src/main/java/com/cmg/comtogether/user/service/UserService.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.ArrayList;
1919
import java.util.List;
20+
import java.util.Optional;
2021

2122
@Service
2223
@RequiredArgsConstructor
@@ -64,4 +65,16 @@ public UserResponseDto initializeUser(Long userId, UserInitializeRequestDto requ
6465

6566
return userMapper.toResponse(user);
6667
}
68+
69+
public void deleteUser(User user) {
70+
Optional<User> deleteUser = userRepository.findById(user.getUserId());
71+
if (deleteUser.isEmpty()) {
72+
throw new BusinessException(ErrorCode.USER_NOT_FOUND);
73+
}
74+
userRepository.delete(deleteUser.get());
75+
}
76+
77+
public void deleteAllUsers() {
78+
userRepository.deleteAll();
79+
}
6780
}

0 commit comments

Comments
 (0)