From 0485d6a3c7d224e2187d3c2db68336dabbab80b0 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Tue, 27 Jan 2026 21:26:50 +0530 Subject: [PATCH] Delete image tags and unlink from images --- .../android/trisolarisserver/controller/RoomImageTags.kt | 6 +++--- .../com/android/trisolarisserver/repo/RoomImageRepo.kt | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/RoomImageTags.kt b/src/main/kotlin/com/android/trisolarisserver/controller/RoomImageTags.kt index 2977b6b..7e05639 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/RoomImageTags.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/RoomImageTags.kt @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.ResponseStatus import org.springframework.web.bind.annotation.RestController import org.springframework.web.server.ResponseStatusException +import org.springframework.transaction.annotation.Transactional import java.util.UUID @RestController @@ -68,16 +69,15 @@ class RoomImageTags( @DeleteMapping("/{tagId}") @ResponseStatus(HttpStatus.NO_CONTENT) + @Transactional fun deleteTag( @PathVariable tagId: UUID, @AuthenticationPrincipal principal: MyPrincipal? ) { requireSuperAdmin(principal) - if (roomImageRepo.existsByTagsId(tagId)) { - throw ResponseStatusException(HttpStatus.CONFLICT, "Tag is used by images") - } val tag = roomImageTagRepo.findById(tagId).orElse(null) ?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Tag not found") + roomImageRepo.deleteTagLinks(tagId) roomImageTagRepo.delete(tag) } diff --git a/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt b/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt index 086d2c4..95a3be2 100644 --- a/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt +++ b/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt @@ -42,6 +42,10 @@ interface RoomImageRepo : JpaRepository { fun existsByRoomIdAndContentHash(roomId: UUID, contentHash: String): Boolean fun existsByTagsId(id: UUID): Boolean + @org.springframework.data.jpa.repository.Modifying + @Query(value = "delete from room_image_tag_link where tag_id = :tagId", nativeQuery = true) + fun deleteTagLinks(@Param("tagId") tagId: UUID): Int + @Query("select coalesce(max(ri.roomSortOrder), 0) from RoomImage ri where ri.room.id = :roomId") fun findMaxRoomSortOrder(@Param("roomId") roomId: UUID): Int