diff --git a/src/main/java/com/back/domain/mybar/controller/MyBarController.java b/src/main/java/com/back/domain/mybar/controller/MyBarController.java index 57b246e1..022c3e52 100644 --- a/src/main/java/com/back/domain/mybar/controller/MyBarController.java +++ b/src/main/java/com/back/domain/mybar/controller/MyBarController.java @@ -37,4 +37,14 @@ public RsData keep( myBarService.keep(userId, cocktailId); return RsData.of(201, "kept"); // Aspect가 HTTP 201로 설정 } + + /** 킵 해제(소프트 삭제) — 멱등 */ + @DeleteMapping("/{cocktailId}/keep") + public RsData unkeep( + @AuthenticationPrincipal(expression = "id") Long userId, + @PathVariable Long cocktailId + ) { + myBarService.unkeep(userId, cocktailId); + return RsData.of(200, "deleted"); + } } diff --git a/src/main/java/com/back/domain/mybar/repository/MyBarRepository.java b/src/main/java/com/back/domain/mybar/repository/MyBarRepository.java index 34cd2ade..0ba75c50 100644 --- a/src/main/java/com/back/domain/mybar/repository/MyBarRepository.java +++ b/src/main/java/com/back/domain/mybar/repository/MyBarRepository.java @@ -5,6 +5,8 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -22,4 +24,14 @@ public interface MyBarRepository extends JpaRepository { /** 복원/재킵을 위해 status 무시하고 한 건 찾기 (없으면 Optional.empty) */ Optional findByUser_IdAndCocktail_CocktailId(Long userId, Long cocktailId); + + @Modifying(clearAutomatically = true, flushAutomatically = true) + @Query(""" + update MyBar m + set m.status = 'DELETED', m.deletedAt = CURRENT_TIMESTAMP + where m.user.id = :userId + and m.cocktail.cocktailId = :cocktailId + and m.status = 'ACTIVE' + """) + int softDeleteByUserAndCocktail(Long userId, Long cocktailId); } diff --git a/src/main/java/com/back/domain/mybar/service/MyBarService.java b/src/main/java/com/back/domain/mybar/service/MyBarService.java index e99330fa..aea90bdc 100644 --- a/src/main/java/com/back/domain/mybar/service/MyBarService.java +++ b/src/main/java/com/back/domain/mybar/service/MyBarService.java @@ -68,4 +68,10 @@ public void keep(Long userId, Long cocktailId) { myBarRepository.save(myBar); } + + /** 킵 해제(소프트 삭제) */ + @Transactional + public void unkeep(Long userId, Long cocktailId) { + myBarRepository.softDeleteByUserAndCocktail(userId, cocktailId); + } }