Skip to content

Commit

Permalink
Feat: 회원 탈퇴 리팩터링 #83
Browse files Browse the repository at this point in the history
  • Loading branch information
Irisation23 authored and corock-dev committed Aug 31, 2022
1 parent 9fd623c commit 8de64a1
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static org.springframework.http.MediaType.APPLICATION_JSON;

import com.nhnacademy.marketgg.auth.annotation.Token;
import com.nhnacademy.marketgg.auth.dto.request.AuthWithDrawRequest;
import com.nhnacademy.marketgg.auth.dto.request.MemberInfoRequest;
import com.nhnacademy.marketgg.auth.dto.request.MemberUpdateRequest;
import com.nhnacademy.marketgg.auth.dto.response.MemberInfoResponse;
Expand All @@ -15,7 +16,6 @@
import com.nhnacademy.marketgg.auth.jwt.TokenUtils;
import com.nhnacademy.marketgg.auth.service.AuthInfoService;
import com.nhnacademy.marketgg.auth.service.AuthService;
import java.time.LocalDateTime;
import java.util.List;
import javax.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -54,8 +54,7 @@ public class AuthInfoController {
*/
@PutMapping
public ResponseEntity<AuthResult<UuidTokenResponse>> update(@Token String token,
@Valid @RequestBody
final MemberUpdateRequest memberUpdateRequest) {
@Valid @RequestBody final MemberUpdateRequest memberUpdateRequest) {

UuidTokenResponse update = authInfoService.update(token, memberUpdateRequest);

Expand All @@ -80,7 +79,7 @@ public ResponseEntity<AuthResult<UuidTokenResponse>> update(@Token String token,
*/
@DeleteMapping
public ResponseEntity<AuthResult<String>> withdraw(@Token String token,
@RequestBody final LocalDateTime withdrawAt) {
@Valid @RequestBody final AuthWithDrawRequest withdrawAt) {

authInfoService.withdraw(token, withdrawAt);
authService.logout(token);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
package com.nhnacademy.marketgg.auth.dto.request;

import java.time.LocalDateTime;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class AuthWithDrawRequest {

private LocalDateTime deletedAt;
@Email(message = "이메일 양식을 지켜주세요.")
@NotBlank(message = "이메일을 입력해 주세요.")
private String email;

@NotBlank(message = "비밀번호를 입력해 주세요.")
private String password;

private LocalDateTime withdrawAt;

public void encodingPassword(PasswordEncoder passwordEncoder) {
this.password = passwordEncoder.encode(this.password);
}

}
12 changes: 10 additions & 2 deletions src/main/java/com/nhnacademy/marketgg/auth/entity/Auth.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.nhnacademy.marketgg.auth.entity;

import com.nhnacademy.marketgg.auth.constant.Provider;
import com.nhnacademy.marketgg.auth.dto.request.AuthWithDrawRequest;
import com.nhnacademy.marketgg.auth.dto.request.MemberUpdateRequest;
import com.nhnacademy.marketgg.auth.dto.request.signup.SignUpRequest;
import com.nhnacademy.marketgg.auth.exception.AuthNotFoundException;
import com.nhnacademy.marketgg.auth.exception.WithdrawMemberException;
import java.time.LocalDate;
import java.time.LocalDateTime;
Expand Down Expand Up @@ -123,8 +125,14 @@ public String updateAuth(final MemberUpdateRequest memberUpdateRequest, Password
return updatedUuid;
}

public void deleteAuth(final LocalDateTime withdrawAt) {
this.deletedAt = withdrawAt;
public void deleteAuth(final AuthWithDrawRequest withdrawAt, PasswordEncoder passwordEncoder) {
if (this.email.equals(withdrawAt.getEmail())
&& passwordEncoder.matches(this.password, withdrawAt.getPassword())) {

this.deletedAt = withdrawAt.getWithdrawAt();
} else {
throw new AuthNotFoundException();
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.nhnacademy.marketgg.auth.service;

import com.nhnacademy.marketgg.auth.dto.request.AuthWithDrawRequest;
import com.nhnacademy.marketgg.auth.dto.request.MemberUpdateRequest;
import com.nhnacademy.marketgg.auth.dto.response.MemberInfoResponse;
import com.nhnacademy.marketgg.auth.dto.response.MemberNameResponse;
Expand Down Expand Up @@ -62,6 +63,6 @@ public interface AuthInfoService {
* @param withdrawAt - 삭제 시간 입니다.
* @author 김훈민
*/
void withdraw(final String token, final LocalDateTime withdrawAt);
void withdraw(final String token, final AuthWithDrawRequest withdrawAt);

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.nhnacademy.marketgg.auth.service.impl;

import com.nhnacademy.marketgg.auth.dto.request.AuthWithDrawRequest;
import com.nhnacademy.marketgg.auth.dto.request.MemberUpdateRequest;
import com.nhnacademy.marketgg.auth.dto.response.MemberInfoResponse;
import com.nhnacademy.marketgg.auth.dto.response.MemberNameResponse;
Expand All @@ -11,10 +12,10 @@
import com.nhnacademy.marketgg.auth.repository.auth.AuthRepository;
import com.nhnacademy.marketgg.auth.repository.role.RoleRepository;
import com.nhnacademy.marketgg.auth.service.AuthInfoService;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
Expand All @@ -25,6 +26,7 @@
/**
* 회원 정보에 대한 비즈니스 로직을 처리하는 기본 구현체입니다.
*/
@Slf4j
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
Expand Down Expand Up @@ -103,14 +105,15 @@ public UuidTokenResponse update(final String token, final MemberUpdateRequest me
*/
@Transactional
@Override
public void withdraw(String token, final LocalDateTime withdrawAt) {

public void withdraw(final String token, final AuthWithDrawRequest withdrawAuth) {
String uuid = tokenUtils.getUuidFromToken(token);

Auth deletedAuth = authRepository.findByUuid(uuid)
.orElseThrow(AuthNotFoundException::new);

deletedAuth.deleteAuth(withdrawAt);
withdrawAuth.encodingPassword(passwordEncoder);

deletedAuth.deleteAuth(withdrawAuth, passwordEncoder);
}

}

0 comments on commit 8de64a1

Please sign in to comment.