From 1408c1f447aff1b4f1448248a90cb876731288fb Mon Sep 17 00:00:00 2001 From: jy000n Date: Thu, 16 Jul 2026 16:58:44 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=EC=BA=98=EB=A6=B0=EB=8D=94=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=EC=83=81=ED=83=9C=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=ED=83=88=ED=87=B4=20=EC=8B=9C=20500=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/CalendarRevocationOutbox.java | 2 +- .../CalendarConnectionRepository.java | 9 +++++++++ .../Timo/global/auth/service/AuthService.java | 19 ++++++++----------- 3 files changed, 18 insertions(+), 12 deletions(-) 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..0ca5d9dc 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 @@ -1,11 +1,20 @@ package com.Timo.Timo.domain.calendar.repository; import com.Timo.Timo.domain.calendar.entity.CalendarConnection; +import io.lettuce.core.dynamic.annotation.Param; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; 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/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() + ) + ); } } From 149da04675b385ef03d7862de5aceb045f9c3193 Mon Sep 17 00:00:00 2001 From: jy000n Date: Thu, 16 Jul 2026 17:56:45 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EC=9E=98=EB=AA=BB=EB=90=9C=20import?= =?UTF-8?q?=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendar/repository/CalendarConnectionRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0ca5d9dc..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 @@ -1,10 +1,10 @@ package com.Timo.Timo.domain.calendar.repository; import com.Timo.Timo.domain.calendar.entity.CalendarConnection; -import io.lettuce.core.dynamic.annotation.Param; 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 { From 866b6e100c6027a42848c8c4176fe6f1fcfd952a Mon Sep 17 00:00:00 2001 From: jy000n Date: Thu, 16 Jul 2026 18:23:17 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=ED=83=88?= =?UTF-8?q?=ED=87=B4=20=EC=8B=9C=20=EC=97=B0=EA=B4=80=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20CASCADE=20=EC=82=AD=EC=A0=9C=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=B4=20=EC=97=94=ED=8B=B0=ED=8B=B0=EC=97=90=20@OnDelete=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Timo/Timo/domain/calendar/entity/CalendarConnection.java | 2 ++ src/main/java/com/Timo/Timo/domain/tag/entity/Tag.java | 5 ++++- .../java/com/Timo/Timo/domain/timer/entity/TimerRecord.java | 4 ++++ .../java/com/Timo/Timo/domain/timer/entity/TimerSession.java | 3 +++ src/main/java/com/Timo/Timo/domain/todo/entity/Subtask.java | 5 ++++- src/main/java/com/Timo/Timo/domain/todo/entity/Todo.java | 5 ++++- .../java/com/Timo/Timo/domain/todo/entity/TodoInstance.java | 3 +++ 7 files changed, 24 insertions(+), 3 deletions(-) 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/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)