Skip to content

Commit fc9865b

Browse files
committed
feat: @SQLDelete, @where를 이용한 soft delete 추가
1 parent ca4892b commit fc9865b

9 files changed

Lines changed: 36 additions & 9 deletions

File tree

src/main/java/bitnagil/bitnagil_backend/emotionMarble/domain/EmotionMarble.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@
1010
import lombok.Builder;
1111
import lombok.Getter;
1212
import lombok.NoArgsConstructor;
13+
import org.hibernate.annotations.SQLDelete;
14+
import org.hibernate.annotations.Where;
1315

1416
import java.time.LocalDate;
1517
import java.time.LocalDateTime;
16-
import java.util.UUID;
1718

1819
@Getter
1920
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2021
@Entity
22+
@SQLDelete(sql = "UPDATE emotion_marble SET deleted_at = NOW() WHERE emotion_marble_id = ?")
23+
@Where(clause = "deleted_at IS NULL")
2124
public class EmotionMarble extends BaseTimeEntity {
2225

2326
@EmbeddedId

src/main/java/bitnagil/bitnagil_backend/onboarding/domain/Case.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,23 @@
66
import lombok.Builder;
77
import lombok.Getter;
88
import lombok.NoArgsConstructor;
9+
import org.hibernate.annotations.SQLDelete;
10+
import org.hibernate.annotations.Where;
911

1012
@Getter
1113
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1214
@Entity
1315
@Table(name = "routine_case") // 이렇게 예약어 회피
16+
@SQLDelete(sql = "UPDATE routine_case SET deleted_at = NOW() WHERE case_id = ?")
17+
@Where(clause = "deleted_at IS NULL")
1418
public class Case extends BaseTimeEntity {
1519

1620
@Id
1721
@GeneratedValue(strategy = GenerationType.IDENTITY)
1822
private Long caseId;
1923

2024
@Builder
21-
public Case(Long caseId, String caseName) {
25+
public Case(Long caseId) {
2226
this.caseId = caseId;
2327
}
2428
}

src/main/java/bitnagil/bitnagil_backend/onboarding/domain/Onboarding.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@
77
import lombok.AccessLevel;
88
import lombok.Getter;
99
import lombok.NoArgsConstructor;
10+
import org.hibernate.annotations.SQLDelete;
11+
import org.hibernate.annotations.Where;
1012

1113
import java.time.LocalTime;
1214

1315
@Getter
1416
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1517
@Entity
18+
@SQLDelete(sql = "UPDATE onboarding SET deleted_at = NOW() WHERE onboarding_id = ?")
19+
@Where(clause = "deleted_at IS NULL")
1620
public class Onboarding extends BaseTimeEntity {
1721

1822
@Id

src/main/java/bitnagil/bitnagil_backend/recommendedRoutine/domain/RecommendedRoutine.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99
import lombok.AccessLevel;
1010
import lombok.Getter;
1111
import lombok.NoArgsConstructor;
12+
import org.hibernate.annotations.SQLDelete;
13+
import org.hibernate.annotations.Where;
1214

1315
import java.time.LocalTime;
1416

1517
@Getter
1618
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1719
@Entity
20+
@SQLDelete(sql = "UPDATE recommended_routine SET deleted_at = NOW() WHERE recommended_routine_id = ?")
21+
@Where(clause = "deleted_at IS NULL")
1822
public class RecommendedRoutine extends BaseTimeEntity {
1923

2024
@Id

src/main/java/bitnagil/bitnagil_backend/recommendedRoutine/domain/RecommendedSubRoutine.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
import lombok.AccessLevel;
66
import lombok.Getter;
77
import lombok.NoArgsConstructor;
8+
import org.hibernate.annotations.SQLDelete;
9+
import org.hibernate.annotations.Where;
810

911
@Getter
1012
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1113
@Entity
14+
@SQLDelete(sql = "UPDATE recommended_sub_routine SET deleted_at = NOW() WHERE recommended_sub_routine_id = ?")
15+
@Where(clause = "deleted_at IS NULL")
1216
public class RecommendedSubRoutine extends BaseTimeEntity {
1317

1418
@Id

src/main/java/bitnagil/bitnagil_backend/routineInfoV2/domain/RoutineInfoV2.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,17 @@
2020
import lombok.Builder;
2121
import lombok.Getter;
2222
import lombok.NoArgsConstructor;
23+
import org.hibernate.annotations.SQLDelete;
24+
import org.hibernate.annotations.Where;
2325

2426
/**
2527
* 추후 v2를 대비한 루틴에 대한 정보를 관리하는 엔티티 클래스입니다.
2628
*/
2729
@Getter
2830
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2931
@Entity
32+
@SQLDelete(sql = "UPDATE routine_info_v2 SET deleted_at = NOW() WHERE routine_info_id = ?")
33+
@Where(clause = "deleted_at IS NULL")
3034
public class RoutineInfoV2 {
3135
@Id
3236
@GeneratedValue(strategy = GenerationType.IDENTITY)

src/main/java/bitnagil/bitnagil_backend/routineV2/domain/RoutineV2.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@
1919
import lombok.Builder;
2020
import lombok.Getter;
2121
import lombok.NoArgsConstructor;
22+
import org.hibernate.annotations.SQLDelete;
23+
import org.hibernate.annotations.Where;
2224

2325
/**
2426
* 추후 v2를 대비한 일자별 루틴을 관리하는 엔티티 클래스입니다.
2527
*/
2628
@Getter
2729
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2830
@Entity
31+
@SQLDelete(sql = "UPDATE routine_v2 SET deleted_at = NOW() WHERE routine_id = ?")
32+
@Where(clause = "deleted_at IS NULL")
2933
public class RoutineV2 {
3034
@Id
3135
@GeneratedValue(strategy = GenerationType.IDENTITY)

src/main/java/bitnagil/bitnagil_backend/user/domain/User.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package bitnagil.bitnagil_backend.user.domain;
22

3-
import java.time.LocalDateTime;
4-
53
import bitnagil.bitnagil_backend.enums.Role;
64
import bitnagil.bitnagil_backend.enums.SocialType;
75
import bitnagil.bitnagil_backend.global.entity.BaseTimeEntity;
8-
import bitnagil.bitnagil_backend.global.entity.HistoryPk;
96
import bitnagil.bitnagil_backend.onboarding.domain.Onboarding;
107
import jakarta.persistence.*;
11-
import jakarta.validation.constraints.NotNull;
128
import lombok.AccessLevel;
139
import lombok.Builder;
1410
import lombok.Getter;
1511
import lombok.NoArgsConstructor;
12+
import org.hibernate.annotations.SQLDelete;
13+
import org.hibernate.annotations.Where;
1614

1715
/**
1816
* 소셜 인증을 통해 가입한 사용자의 정보를 저장하는 JPA 엔티티 클래스입니다.
@@ -21,6 +19,8 @@
2119
@Getter
2220
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2321
@Entity
22+
@SQLDelete(sql = "UPDATE user SET role = 'WITHDRAWN', deleted_at = NOW() WHERE user_id = ?")
23+
@Where(clause = "deleted_at IS NULL")
2424
public class User extends BaseTimeEntity {
2525

2626
@Id
@@ -75,6 +75,7 @@ public void updateOnboarding(Onboarding onboarding) {
7575
this.onboarding = onboarding;
7676
}
7777

78+
// todo: 운영 반영 후 이슈가 없으면 제거
7879
public void changeRoleToWithdrawn() {
7980
this.role = Role.WITHDRAWN;
8081
}

src/main/java/bitnagil/bitnagil_backend/user/service/UserAuthService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,13 @@ public void logout(User user) {
8888
// 회원탈퇴 - 회원 관련 정보 삭제 및 소셜과 연결 끊기
8989
@Transactional
9090
public void withdrawal(User user) {
91-
LocalDateTime now = LocalDateTime.now();
92-
9391
// 변경 감지를 위해 영속 상태로 설정
9492
User persistedUser = userManager.getPersistedUser(user);
9593

9694
invalidateToken(persistedUser);
9795

98-
persistedUser.changeRoleToWithdrawn();
96+
// 회원 삭제 (delete() 호출 시 @SQLDelete 어노테이션에 의해 role은 WITHDRAWN로 deleted_at은 NOW()로 변경됨)
97+
userRepository.delete(user);
9998

10099
unlinkFromSocial(persistedUser);
101100
}

0 commit comments

Comments
 (0)