diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/RoomImages.kt b/src/main/kotlin/com/android/trisolarisserver/controller/RoomImages.kt index e856af2..1efaf01 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/RoomImages.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/RoomImages.kt @@ -47,7 +47,7 @@ class RoomImages( requirePrincipal(principal) propertyAccess.requireMember(propertyId, principal!!.userId) ensureRoom(propertyId, roomId) - return roomImageRepo.findByRoomIdOrderByCreatedAtDesc(roomId) + return roomImageRepo.findByRoomIdOrdered(roomId) .map { it.toResponse(publicBaseUrl) } } @@ -57,7 +57,9 @@ class RoomImages( @PathVariable propertyId: UUID, @PathVariable roomId: UUID, @AuthenticationPrincipal principal: MyPrincipal?, - @RequestParam("file") file: MultipartFile + @RequestParam("file") file: MultipartFile, + @RequestParam(required = false) sortOrder: Int?, + @RequestParam(required = false) category: String? ): RoomImageResponse { requirePrincipal(principal) propertyAccess.requireMember(propertyId, principal!!.userId) @@ -79,7 +81,9 @@ class RoomImages( originalPath = stored.originalPath, thumbnailPath = stored.thumbnailPath, contentType = stored.contentType, - sizeBytes = stored.sizeBytes + sizeBytes = stored.sizeBytes, + sortOrder = sortOrder, + category = category ) return roomImageRepo.save(image).toResponse(publicBaseUrl) } @@ -134,6 +138,8 @@ private fun RoomImage.toResponse(baseUrl: String): RoomImageResponse { thumbnailUrl = "$baseUrl/properties/${property.id}/rooms/${room.id}/images/$id/file?size=thumb", contentType = contentType, sizeBytes = sizeBytes, + sortOrder = sortOrder, + category = category, createdAt = createdAt.toString() ) } diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/dto/RoomDtos.kt b/src/main/kotlin/com/android/trisolarisserver/controller/dto/RoomDtos.kt index 627e25f..b13d38c 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/dto/RoomDtos.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/dto/RoomDtos.kt @@ -38,6 +38,8 @@ data class RoomImageResponse( val thumbnailUrl: String, val contentType: String, val sizeBytes: Long, + val sortOrder: Int?, + val category: String?, val createdAt: String ) diff --git a/src/main/kotlin/com/android/trisolarisserver/models/room/RoomImage.kt b/src/main/kotlin/com/android/trisolarisserver/models/room/RoomImage.kt index ec0fe88..9996209 100644 --- a/src/main/kotlin/com/android/trisolarisserver/models/room/RoomImage.kt +++ b/src/main/kotlin/com/android/trisolarisserver/models/room/RoomImage.kt @@ -33,6 +33,12 @@ class RoomImage( @Column(name = "size_bytes", nullable = false) var sizeBytes: Long, + @Column(name = "sort_order") + var sortOrder: Int? = null, + + @Column + var category: String? = null, + @Column(name = "created_at", nullable = false, columnDefinition = "timestamptz") val createdAt: OffsetDateTime = OffsetDateTime.now() ) diff --git a/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt b/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt index 60c7607..fab0373 100644 --- a/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt +++ b/src/main/kotlin/com/android/trisolarisserver/repo/RoomImageRepo.kt @@ -1,10 +1,20 @@ package com.android.trisolarisserver.repo import com.android.trisolarisserver.models.room.RoomImage +import org.springframework.data.jpa.repository.Query +import org.springframework.data.repository.query.Param import org.springframework.data.jpa.repository.JpaRepository import java.util.UUID interface RoomImageRepo : JpaRepository { - fun findByRoomIdOrderByCreatedAtDesc(roomId: UUID): List + @Query( + """ + select ri + from RoomImage ri + where ri.room.id = :roomId + order by (ri.sortOrder is null), ri.sortOrder asc, ri.createdAt desc + """ + ) + fun findByRoomIdOrdered(@Param("roomId") roomId: UUID): List fun findByIdAndRoomIdAndPropertyId(id: UUID, roomId: UUID, propertyId: UUID): RoomImage? }