package com.android.trisolarisserver.db.repo import com.android.trisolarisserver.models.room.Room import org.springframework.data.jpa.repository.EntityGraph import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.query.Param import java.util.UUID interface RoomRepo : JpaRepository { @EntityGraph(attributePaths = ["roomType"]) fun findByPropertyIdOrderByRoomNumber(propertyId: UUID): List fun findByIdAndPropertyId(id: UUID, propertyId: UUID): Room? fun existsByPropertyIdAndRoomNumber(propertyId: UUID, roomNumber: Int): Boolean fun existsByPropertyIdAndRoomNumberAndIdNot(propertyId: UUID, roomNumber: Int, id: UUID): Boolean fun existsByPropertyIdAndRoomTypeId(propertyId: UUID, roomTypeId: UUID): Boolean @Query(""" select r from Room r where r.property.id = :propertyId and r.active = true and r.maintenance = false and not exists ( select 1 from RoomStay rs where rs.room = r and rs.toAt is null ) order by r.roomNumber """) fun findFreeRooms(@Param("propertyId") propertyId: UUID): List @Query(""" select r from Room r join RoomStay rs on rs.room = r where r.property.id = :propertyId and rs.toAt is null order by r.roomNumber """) fun findOccupiedRooms(@Param("propertyId") propertyId: UUID): List }