package com.android.trisolarisserver.db.repo import com.android.trisolarisserver.models.property.* 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 PropertyUserRepo : JpaRepository { fun existsByIdPropertyIdAndIdUserId(propertyId: UUID, userId: UUID): Boolean fun findByIdUserId(userId: UUID): List fun findByIdPropertyId(propertyId: UUID): List @Query(""" select r from PropertyUser pu join pu.roles r where pu.id.propertyId = :propertyId and pu.id.userId = :userId """) fun findRolesByPropertyAndUser( @Param("propertyId") propertyId: UUID, @Param("userId") userId: UUID ): Set @Query(""" select pu.property.id from PropertyUser pu where pu.user.id = :userId and pu.property.org.id = :orgId """) fun findPropertyIdsByOrgAndUser( @Param("orgId") orgId: UUID, @Param("userId") userId: UUID ): List @Query(""" select case when count(pu) > 0 then true else false end from PropertyUser pu join pu.roles r where pu.id.propertyId = :propertyId and pu.id.userId = :userId and r in :roles """) fun hasAnyRole( @Param("propertyId") propertyId: UUID, @Param("userId") userId: UUID, @Param("roles") roles: Set ): Boolean @Query(""" select case when count(pu) > 0 then true else false end from PropertyUser pu join pu.roles r where pu.user.id = :userId and pu.property.org.id = :orgId and r in :roles """) fun hasAnyRoleInOrg( @Param("orgId") orgId: UUID, @Param("userId") userId: UUID, @Param("roles") roles: Set ): Boolean }