diff --git a/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarConnection.java b/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarConnection.java index ecb5992c..1cbf7bdc 100644 --- a/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarConnection.java +++ b/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarConnection.java @@ -17,6 +17,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @Table(name = "calendar_connections") diff --git a/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarRevocationOutbox.java b/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarRevocationOutbox.java index 26c16848..72723ae8 100644 --- a/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarRevocationOutbox.java +++ b/src/main/java/com/Timo/Timo/domain/calendar/entity/CalendarRevocationOutbox.java @@ -53,4 +53,4 @@ public void markFailed() { this.status = RevocationStatus.FAILED; } } -} \ No newline at end of file +} diff --git a/src/main/java/com/Timo/Timo/domain/calendar/repository/CalendarConnectionRepository.java b/src/main/java/com/Timo/Timo/domain/calendar/repository/CalendarConnectionRepository.java index 5ef2ec9f..4c3e171f 100644 --- a/src/main/java/com/Timo/Timo/domain/calendar/repository/CalendarConnectionRepository.java +++ b/src/main/java/com/Timo/Timo/domain/calendar/repository/CalendarConnectionRepository.java @@ -3,9 +3,18 @@ import com.Timo.Timo.domain.calendar.entity.CalendarConnection; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface CalendarConnectionRepository extends JpaRepository { Optional findByUserId(Long userId); boolean existsByUserId(Long userId); + + @Query(""" + select coalesce(c.refreshToken, c.accessToken) + from CalendarConnection c + where c.user.id = :userId + """) + Optional findTokenToRevokeByUserId(@Param("userId") Long userId); } diff --git a/src/main/java/com/Timo/Timo/domain/tag/entity/Tag.java b/src/main/java/com/Timo/Timo/domain/tag/entity/Tag.java index 823df099..f10ec676 100644 --- a/src/main/java/com/Timo/Timo/domain/tag/entity/Tag.java +++ b/src/main/java/com/Timo/Timo/domain/tag/entity/Tag.java @@ -15,6 +15,8 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @Table(name = "tags", @@ -33,7 +35,8 @@ public class Tag { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") - private User user; + @OnDelete(action = OnDeleteAction.CASCADE) + private User user; @Column(name = "name", nullable = false, length = 10) private String name; diff --git a/src/main/java/com/Timo/Timo/domain/timer/entity/TimerRecord.java b/src/main/java/com/Timo/Timo/domain/timer/entity/TimerRecord.java index 65dc80f4..d58bedeb 100644 --- a/src/main/java/com/Timo/Timo/domain/timer/entity/TimerRecord.java +++ b/src/main/java/com/Timo/Timo/domain/timer/entity/TimerRecord.java @@ -25,6 +25,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -42,10 +44,12 @@ public class TimerRecord { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) + @OnDelete(action = OnDeleteAction.CASCADE) private User user; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "todo_id", nullable = false) + @OnDelete(action = OnDeleteAction.CASCADE) private Todo todo; @Column(name = "planned_seconds", nullable = false) diff --git a/src/main/java/com/Timo/Timo/domain/timer/entity/TimerSession.java b/src/main/java/com/Timo/Timo/domain/timer/entity/TimerSession.java index e29ef9cd..d42ddbd8 100644 --- a/src/main/java/com/Timo/Timo/domain/timer/entity/TimerSession.java +++ b/src/main/java/com/Timo/Timo/domain/timer/entity/TimerSession.java @@ -16,6 +16,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @Table(name = "timer_sessions") @@ -30,6 +32,7 @@ public class TimerSession { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "timer_record_id", nullable = false) + @OnDelete(action = OnDeleteAction.CASCADE) private TimerRecord timerRecord; @Column(name = "started_at", nullable = false) diff --git a/src/main/java/com/Timo/Timo/domain/todo/entity/Subtask.java b/src/main/java/com/Timo/Timo/domain/todo/entity/Subtask.java index 4a6f1b95..f5af0315 100644 --- a/src/main/java/com/Timo/Timo/domain/todo/entity/Subtask.java +++ b/src/main/java/com/Timo/Timo/domain/todo/entity/Subtask.java @@ -14,6 +14,8 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @Table(name = "subtasks") @@ -28,7 +30,8 @@ public class Subtask extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "todo_id", nullable = false) - private Todo todo; + @OnDelete(action = OnDeleteAction.CASCADE) + private Todo todo; @Column(name = "content", nullable = false, length = 20) private String content; diff --git a/src/main/java/com/Timo/Timo/domain/todo/entity/Todo.java b/src/main/java/com/Timo/Timo/domain/todo/entity/Todo.java index a887da03..1d4a27d9 100644 --- a/src/main/java/com/Timo/Timo/domain/todo/entity/Todo.java +++ b/src/main/java/com/Timo/Timo/domain/todo/entity/Todo.java @@ -36,6 +36,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @Table(name = "todos") @@ -50,7 +52,8 @@ public class Todo extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "user_id", nullable = false) - private User user; + @OnDelete(action = OnDeleteAction.CASCADE) + private User user; @Enumerated(EnumType.STRING) @Column(name = "icon", length = 20) diff --git a/src/main/java/com/Timo/Timo/domain/todo/entity/TodoInstance.java b/src/main/java/com/Timo/Timo/domain/todo/entity/TodoInstance.java index a8692ed5..8a6c2fb4 100644 --- a/src/main/java/com/Timo/Timo/domain/todo/entity/TodoInstance.java +++ b/src/main/java/com/Timo/Timo/domain/todo/entity/TodoInstance.java @@ -20,6 +20,8 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; @Entity @Table( @@ -40,6 +42,7 @@ public class TodoInstance extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "todo_id", nullable = false) + @OnDelete(action = OnDeleteAction.CASCADE) private Todo todo; @Column(name = "instance_date", nullable = false) diff --git a/src/main/java/com/Timo/Timo/global/auth/service/AuthService.java b/src/main/java/com/Timo/Timo/global/auth/service/AuthService.java index 0560f9cc..6f1db3cb 100644 --- a/src/main/java/com/Timo/Timo/global/auth/service/AuthService.java +++ b/src/main/java/com/Timo/Timo/global/auth/service/AuthService.java @@ -129,16 +129,13 @@ public void afterCommit() { } private void revokeCalendarConnectionIfExists(Long userId) { - calendarConnectionRepository.findByUserId(userId).ifPresent(connection -> { - String tokenToRevoke = connection.getRefreshToken() != null - ? connection.getRefreshToken() - : connection.getAccessToken(); - - calendarRevocationOutboxRepository.save( - CalendarRevocationOutbox.builder() - .token(tokenToRevoke) - .build() - ); - }); + calendarConnectionRepository.findTokenToRevokeByUserId(userId) + .ifPresent(tokenToRevoke -> + calendarRevocationOutboxRepository.save( + CalendarRevocationOutbox.builder() + .token(tokenToRevoke) + .build() + ) + ); } }