Reorder room image sequences after delete
All checks were successful
build-and-deploy / build-deploy (push) Successful in 30s
All checks were successful
build-and-deploy / build-deploy (push) Successful in 30s
This commit is contained in:
@@ -14,6 +14,7 @@ import org.springframework.http.HttpStatus
|
|||||||
import org.springframework.http.MediaType
|
import org.springframework.http.MediaType
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||||
|
import org.springframework.transaction.annotation.Transactional
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping
|
import org.springframework.web.bind.annotation.DeleteMapping
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
import org.springframework.web.bind.annotation.PathVariable
|
import org.springframework.web.bind.annotation.PathVariable
|
||||||
@@ -100,6 +101,7 @@ class RoomImages(
|
|||||||
|
|
||||||
@DeleteMapping("/{imageId}")
|
@DeleteMapping("/{imageId}")
|
||||||
@ResponseStatus(HttpStatus.NO_CONTENT)
|
@ResponseStatus(HttpStatus.NO_CONTENT)
|
||||||
|
@Transactional
|
||||||
fun delete(
|
fun delete(
|
||||||
@PathVariable propertyId: UUID,
|
@PathVariable propertyId: UUID,
|
||||||
@PathVariable roomId: UUID,
|
@PathVariable roomId: UUID,
|
||||||
@@ -113,6 +115,7 @@ class RoomImages(
|
|||||||
|
|
||||||
val image = roomImageRepo.findByIdAndRoomIdAndPropertyId(imageId, roomId, propertyId)
|
val image = roomImageRepo.findByIdAndRoomIdAndPropertyId(imageId, roomId, propertyId)
|
||||||
?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Image not found")
|
?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Image not found")
|
||||||
|
val roomTypeCode = image.roomTypeCode
|
||||||
try {
|
try {
|
||||||
Files.deleteIfExists(Paths.get(image.originalPath))
|
Files.deleteIfExists(Paths.get(image.originalPath))
|
||||||
Files.deleteIfExists(Paths.get(image.thumbnailPath))
|
Files.deleteIfExists(Paths.get(image.thumbnailPath))
|
||||||
@@ -120,6 +123,34 @@ class RoomImages(
|
|||||||
throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Failed to delete image files")
|
throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Failed to delete image files")
|
||||||
}
|
}
|
||||||
roomImageRepo.delete(image)
|
roomImageRepo.delete(image)
|
||||||
|
|
||||||
|
// Reorder room-specific sequence
|
||||||
|
val roomImages = roomImageRepo.findByRoomIdForReorder(roomId)
|
||||||
|
if (roomImages.isNotEmpty()) {
|
||||||
|
var order = 1
|
||||||
|
for (img in roomImages) {
|
||||||
|
if (img.roomSortOrder != order) {
|
||||||
|
img.roomSortOrder = order
|
||||||
|
}
|
||||||
|
order++
|
||||||
|
}
|
||||||
|
roomImageRepo.saveAll(roomImages)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reorder room-type sequence
|
||||||
|
if (!roomTypeCode.isNullOrBlank()) {
|
||||||
|
val roomTypeImages = roomImageRepo.findByRoomTypeCodeForReorder(roomTypeCode)
|
||||||
|
if (roomTypeImages.isNotEmpty()) {
|
||||||
|
var order = 1
|
||||||
|
for (img in roomTypeImages) {
|
||||||
|
if (img.roomTypeSortOrder != order) {
|
||||||
|
img.roomTypeSortOrder = order
|
||||||
|
}
|
||||||
|
order++
|
||||||
|
}
|
||||||
|
roomImageRepo.saveAll(roomTypeImages)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{imageId}/file")
|
@GetMapping("/{imageId}/file")
|
||||||
|
|||||||
@@ -16,6 +16,26 @@ interface RoomImageRepo : JpaRepository<RoomImage, UUID> {
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
fun findByRoomIdOrdered(@Param("roomId") roomId: UUID): List<RoomImage>
|
fun findByRoomIdOrdered(@Param("roomId") roomId: UUID): List<RoomImage>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""
|
||||||
|
select ri
|
||||||
|
from RoomImage ri
|
||||||
|
where ri.room.id = :roomId
|
||||||
|
order by ri.roomSortOrder asc, ri.createdAt desc
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
fun findByRoomIdForReorder(@Param("roomId") roomId: UUID): List<RoomImage>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""
|
||||||
|
select ri
|
||||||
|
from RoomImage ri
|
||||||
|
where ri.roomTypeCode = :roomTypeCode
|
||||||
|
order by ri.roomTypeSortOrder asc, ri.createdAt desc
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
fun findByRoomTypeCodeForReorder(@Param("roomTypeCode") roomTypeCode: String): List<RoomImage>
|
||||||
fun findByIdAndRoomIdAndPropertyId(id: UUID, roomId: UUID, propertyId: UUID): RoomImage?
|
fun findByIdAndRoomIdAndPropertyId(id: UUID, roomId: UUID, propertyId: UUID): RoomImage?
|
||||||
fun existsByRoomIdAndContentHash(roomId: UUID, contentHash: String): Boolean
|
fun existsByRoomIdAndContentHash(roomId: UUID, contentHash: String): Boolean
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user