Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: 회원 탈퇴 #209

Merged
merged 6 commits into from
Sep 10, 2024
Merged

Feat: 회원 탈퇴 #209

merged 6 commits into from
Sep 10, 2024

Conversation

adorableco
Copy link
Contributor

@adorableco adorableco commented Sep 10, 2024

PR

✨ 작업 내용

  • 회원 탈퇴 기능을 구현했습니다.

✨ 참고 사항

  • @SQLRestriction 으로 soft delete 해놓은 것에서는 cascade 로 자식 엔티티를 삭제하는 방법을 몰라서 그냥 hard delete 로 구현했습니다. 멤버 탈퇴는 아예 삭제시키는게 맞는 것 같긴 해요..! 이에따라 Question, Workbook, Exam 에 대해서 cascade 옵션을 추가해주었습니다.

⏰ 현재 버그

  • Question, Workbook, Exam 엔티티들이 cascade로 삭제당하는 경우에는 단순 삭제와 달리 soft delete가 되지 않습니다.

  • fixtureMonkey 의 알 수 없는 버그로 외래키가 없는 member 엔티티에 대해서만 fixtureMonkey.givemeOne 메서드를 사용할 수 있었는데 엔티티 필드 변화에 따라 모두 삭제했습니다.

  • 아래와 같은 ktlintformat 에러가 발생해서 MemberDtos 라는 이름 대신 DeleteMemberResponse 라고 명명했습니다. (아마 내부에 데이터 클래스가 하나 뿐이라 통일하라고 하는 것 같네요)

class DeleteMemberResponse should be declared in a file named DeleteMemberResponse.kt (cannot be auto-corrected)

✏ Git Close

@adorableco adorableco added the ✨ Feature 기능 개발 label Sep 10, 2024
@adorableco adorableco self-assigned this Sep 10, 2024
@adorableco adorableco linked an issue Sep 10, 2024 that may be closed by this pull request
1 task
Copy link

github-actions bot commented Sep 10, 2024

Unit Test Results

18 tests   18 ✔️  1s ⏱️
  7 suites    0 💤
  7 files      0

Results for commit b4133ba.

♻️ This comment has been updated with latest results.

Copy link
Contributor

@RinRinPARK RinRinPARK left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

멤버는 hard delete하는 것도 괜찮은 것 같긴 한데, 지금까지 다른거 다 soft delete로 처리했으니 soft delete로 통일하는게 좋을 것 같슴다.(디비에 민감한 사용자 정보는 저장하지 않으니 괜찮을 듯함니다)
근데 soft delete로 하려면 member 엔티티에서 양방향으로 관계를 맺어줘야 하는 번거로움은 있음..

근데 이 브랜치에서 아무것도 안 건들이고 실행해봤을 때, member가 다른 엔티티들(question, workbook 등) foreign key로 지정되어 있어서 삭제하려면 무결성조건에 문제가 생겨서 에러가 납니당

@@ -13,7 +13,7 @@ import java.util.UUID

@Entity
data class Exam(
@ManyToOne
@ManyToOne(cascade = [(CascadeType.REMOVE)])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기다 cascade를 걸면 exam이 삭제될 때, member도 같이 삭제될 것 같슴다!! (수정한 다른 엔티티도 마찬가지)

@adorableco
Copy link
Contributor Author

멤버는 hard delete하는 것도 괜찮은 것 같긴 한데, 지금까지 다른거 다 soft delete로 처리했으니 soft delete로 통일하는게 좋을 것 같슴다.(디비에 민감한 사용자 정보는 저장하지 않으니 괜찮을 듯함니다)

근데 soft delete로 하려면 member 엔티티에서 양방향으로 관계를 맺어줘야 하는 번거로움은 있음..

근데 이 브랜치에서 아무것도 안 건들이고 실행해봤을 때, member가 다른 엔티티들(question, workbook 등) foreign key로 지정되어 있어서 삭제하려면 무결성조건에 문제가 생겨서 에러가 납니당

헉 그럼 member 에서 양방향 관계 맺어주면 soft delete를 해도 cascade soft delete 가 된다는건가영??

@RinRinPARK
Copy link
Contributor

멤버는 hard delete하는 것도 괜찮은 것 같긴 한데, 지금까지 다른거 다 soft delete로 처리했으니 soft delete로 통일하는게 좋을 것 같슴다.(디비에 민감한 사용자 정보는 저장하지 않으니 괜찮을 듯함니다)
근데 soft delete로 하려면 member 엔티티에서 양방향으로 관계를 맺어줘야 하는 번거로움은 있음..
근데 이 브랜치에서 아무것도 안 건들이고 실행해봤을 때, member가 다른 엔티티들(question, workbook 등) foreign key로 지정되어 있어서 삭제하려면 무결성조건에 문제가 생겨서 에러가 납니당

헉 그럼 member 에서 양방향 관계 맺어주면 soft delete를 해도 cascade soft delete 가 된다는건가영??

@Entity
@SQLDelete(sql = "UPDATE member SET deleted_at = NOW() WHERE member_uuid = ?")
@SQLRestriction("deleted_at is NULL")
data class Member(
    val name: String,
    val email: String,
    val image: String,
    @Enumerated(EnumType.STRING)
    val provider: Provider,

    @OneToMany(mappedBy = "member", cascade = [(CascadeType.REMOVE)])
    @JsonIgnore
    val question: List<Question>? = null,


    @OneToMany(mappedBy = "member", cascade = [(CascadeType.REMOVE)])
    @JsonIgnore
    val workbook: List<Workbook>? = null,


    @OneToMany(mappedBy = "member", cascade = [(CascadeType.REMOVE)])
    @JsonIgnore
    val exam: List<Exam>? = null,
) : BaseTimeEntity() {
    @Id
    @Column(name = "member_uuid", nullable = false, unique = true)
    val id: UUID = UUID.randomUUID()
}

멤버 엔티티 코드를 일케 수정하면 멤버도 soft delete되고 나머지 연관된 데이터들도 다 soft delete 됩니더
근데 다른 api들에 영향 없는지 확인은.. 해바야댐

@adorableco
Copy link
Contributor Author

adorableco commented Sep 10, 2024

멤버는 hard delete하는 것도 괜찮은 것 같긴 한데, 지금까지 다른거 다 soft delete로 처리했으니 soft delete로 통일하는게 좋을 것 같슴다.(디비에 민감한 사용자 정보는 저장하지 않으니 괜찮을 듯함니다)
근데 soft delete로 하려면 member 엔티티에서 양방향으로 관계를 맺어줘야 하는 번거로움은 있음..
근데 이 브랜치에서 아무것도 안 건들이고 실행해봤을 때, member가 다른 엔티티들(question, workbook 등) foreign key로 지정되어 있어서 삭제하려면 무결성조건에 문제가 생겨서 에러가 납니당

헉 그럼 member 에서 양방향 관계 맺어주면 soft delete를 해도 cascade soft delete 가 된다는건가영??

@Entity
@SQLDelete(sql = "UPDATE member SET deleted_at = NOW() WHERE member_uuid = ?")
@SQLRestriction("deleted_at is NULL")
data class Member(
    val name: String,
    val email: String,
    val image: String,
    @Enumerated(EnumType.STRING)
    val provider: Provider,

    @OneToMany(mappedBy = "member", cascade = [(CascadeType.REMOVE)])
    @JsonIgnore
    val question: List<Question>? = null,


    @OneToMany(mappedBy = "member", cascade = [(CascadeType.REMOVE)])
    @JsonIgnore
    val workbook: List<Workbook>? = null,


    @OneToMany(mappedBy = "member", cascade = [(CascadeType.REMOVE)])
    @JsonIgnore
    val exam: List<Exam>? = null,
) : BaseTimeEntity() {
    @Id
    @Column(name = "member_uuid", nullable = false, unique = true)
    val id: UUID = UUID.randomUUID()
}

멤버 엔티티 코드를 일케 수정하면 멤버도 soft delete되고 나머지 연관된 데이터들도 다 soft delete 됩니더 근데 다른 api들에 영향 없는지 확인은.. 해바야댐

아하 이렇게..!!! 좋은데욧 근데 신기하게 spring.jpa.hibernate.ddl-auto=none 로 설정해놔도 이런건 바로바로 반영이 되나보네요...

@adorableco adorableco marked this pull request as draft September 10, 2024 07:53
@adorableco adorableco marked this pull request as ready for review September 10, 2024 08:13
Copy link
Contributor

@RinRinPARK RinRinPARK left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굿!!! 베리굿~~

import java.util.UUID

@Entity
@SQLDelete(sql = "UPDATE question_set SET deleted_at = NOW() WHERE question_set_id = ?")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question_set -> member, question_set_id -> member_uuid로 수정해주쎄용

@adorableco adorableco merged commit fa8ee6d into develop Sep 10, 2024
2 checks passed
@adorableco adorableco deleted the seyeon/swm-173 branch September 10, 2024 08:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

✨ Feat: 회원 탈퇴
2 participants