-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #67 from everymeals/feature/user-withdrawal
[Feature/user withdrawal] 마이페이지-회원탈퇴 API
- Loading branch information
Showing
10 changed files
with
201 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
src/main/java/everymeal/server/user/controller/dto/request/WithdrawalReq.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package everymeal.server.user.controller.dto.request; | ||
|
||
|
||
import everymeal.server.user.entity.WithdrawalReason; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import jakarta.validation.constraints.NotBlank; | ||
|
||
public record WithdrawalReq( | ||
@NotBlank | ||
@Schema( | ||
description = "탈퇴 사유를 입력해주세요.", | ||
example = "NOT_USE_USUALLY", | ||
allowableValues = { | ||
"NOT_USE_USUALLY", | ||
"INCONVENIENT_IN_TERMS_OF_USABILITY", | ||
"ERRORS_OCCUR_FREQUENTLY", | ||
"MY_SCHOOL_HAS_CHANGED", | ||
"ETC" | ||
}) | ||
WithdrawalReason withdrawalReason, | ||
@Schema(description = "사유가 '기타'일 경우, 추가 이유 입력해주세요.", example = "다른 서비스를 사용하게 되었다.") | ||
String etcReason) {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
42 changes: 42 additions & 0 deletions
42
src/main/java/everymeal/server/user/entity/Withdrawal.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package everymeal.server.user.entity; | ||
|
||
|
||
import everymeal.server.global.entity.BaseEntity; | ||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.EnumType; | ||
import jakarta.persistence.Enumerated; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.MapsId; | ||
import jakarta.persistence.OneToOne; | ||
import lombok.AccessLevel; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Getter | ||
@Entity | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class Withdrawal extends BaseEntity { | ||
@Id private Long userIdx; | ||
|
||
@Column(nullable = false) | ||
@Enumerated(EnumType.STRING) | ||
private WithdrawalReason withdrawalReason; | ||
|
||
@Column(nullable = true, columnDefinition = "TEXT") | ||
private String etcReason; | ||
|
||
@MapsId | ||
@OneToOne | ||
@JoinColumn(name = "user_idx", referencedColumnName = "idx") | ||
private User user; | ||
|
||
@Builder | ||
public Withdrawal(WithdrawalReason withdrawalReason, String etcReason, User user) { | ||
this.withdrawalReason = withdrawalReason; | ||
this.etcReason = etcReason; | ||
this.user = user; | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/everymeal/server/user/entity/WithdrawalReason.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package everymeal.server.user.entity; | ||
|
||
|
||
import lombok.Getter; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@Getter | ||
@RequiredArgsConstructor | ||
public enum WithdrawalReason { | ||
NOT_USE_USUALLY("앱을 잘 쓰지 않아요"), | ||
INCONVENIENT_IN_TERMS_OF_USABILITY("사용성이 불편해요"), | ||
ERRORS_OCCUR_FREQUENTLY("오류가 자주 발생해요"), | ||
MY_SCHOOL_HAS_CHANGED("학교가 바뀌었어요"), | ||
ETC("기타"); | ||
|
||
public final String MESSAGE; | ||
} |
7 changes: 7 additions & 0 deletions
7
src/main/java/everymeal/server/user/repository/WithdrawalRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package everymeal.server.user.repository; | ||
|
||
|
||
import everymeal.server.user.entity.Withdrawal; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
public interface WithdrawalRepository extends JpaRepository<Withdrawal, Long> {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,10 +16,13 @@ | |
import everymeal.server.user.controller.dto.request.UserEmailLoginReq; | ||
import everymeal.server.user.controller.dto.request.UserEmailSingReq; | ||
import everymeal.server.user.controller.dto.request.UserProfileUpdateReq; | ||
import everymeal.server.user.controller.dto.request.WithdrawalReq; | ||
import everymeal.server.user.controller.dto.response.UserEmailAuthRes; | ||
import everymeal.server.user.controller.dto.response.UserLoginRes; | ||
import everymeal.server.user.entity.User; | ||
import everymeal.server.user.entity.WithdrawalReason; | ||
import everymeal.server.user.repository.UserRepository; | ||
import everymeal.server.user.repository.WithdrawalRepository; | ||
import org.junit.jupiter.api.AfterEach; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
|
@@ -34,9 +37,11 @@ class UserServiceImplTest extends IntegrationTestSupport { | |
@MockBean private MailUtil mailUtil; | ||
@Autowired private UniversityRepository universityRepository; | ||
@Autowired private S3Util s3Util; | ||
@Autowired private WithdrawalRepository withdrawalRepository; | ||
|
||
@AfterEach | ||
void tearDown() { | ||
withdrawalRepository.deleteAllInBatch(); | ||
userRepository.deleteAllInBatch(); | ||
} | ||
|
||
|
@@ -314,6 +319,34 @@ void updateUserProfile_duplicated() { | |
ExceptionList.NICKNAME_ALREADY_EXIST.getCODE()); | ||
} | ||
|
||
@DisplayName("회원 탈퇴 - 정해진 사유를 선택한 경우") | ||
@Test | ||
void withdrawal() { | ||
// given | ||
String token = jwtUtil.generateEmailToken("[email protected]", "12345"); | ||
|
||
University university = | ||
universityRepository.save( | ||
University.builder().name("명지대학교").campusName("인문캠퍼스").build()); | ||
UserEmailSingReq request = | ||
new UserEmailSingReq("연유크림", token, "12345", university.getIdx(), "imageKey"); | ||
|
||
UserLoginRes userLoginRes = userService.signUp(request); | ||
|
||
AuthenticatedUser user = | ||
jwtUtil.getAuthenticateUserFromAccessToken(userLoginRes.accessToken()); | ||
|
||
WithdrawalReq withdrawalReq = | ||
new WithdrawalReq(WithdrawalReason.ERRORS_OCCUR_FREQUENTLY, ""); | ||
|
||
// when then | ||
var result = userService.withdrawal(user, withdrawalReq); | ||
var withdrawalUser = userRepository.findByNickname("연유크림").get(); | ||
|
||
assertEquals(result, Boolean.TRUE); | ||
assertEquals(withdrawalUser.getIsDeleted(), Boolean.TRUE); | ||
} | ||
|
||
private User createUser(String email, String nickname) { | ||
return User.builder().email(email).nickname(nickname).build(); | ||
} | ||
|