Files
TrisolarisServer/src/main/kotlin/com/android/trisolarisserver/db/repo/PropertyUserRepo.kt
2026-01-24 16:11:40 +05:30

65 lines
1.8 KiB
Kotlin

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<PropertyUser, PropertyUserId> {
fun existsByIdPropertyIdAndIdUserId(propertyId: UUID, userId: UUID): Boolean
fun findByIdUserId(userId: UUID): List<PropertyUser>
fun findByIdPropertyId(propertyId: UUID): List<PropertyUser>
@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<Role>
@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<UUID>
@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<Role>
): 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<Role>
): Boolean
}