Change logic for qrs gettings

This commit is contained in:
kashiuno 2025-01-04 16:02:29 +03:00
parent 00afbd266d
commit d5d659811d
2 changed files with 24 additions and 23 deletions

View File

@ -6,18 +6,21 @@ import ru.vyatsu.models.QrCode
import java.time.ZoneOffset
import java.util.*
private const val GET_QRS_BY_DOOR_IDS =
"SELECT key_code, door_id, start_date_time, end_date_time FROM qrs WHERE door_id IN (?)"
private const val GET_ACTUAL_QRS_BY_UNIT_ID = """
SELECT q.start_date_time, q.end_date_time, q.door_id, q.key_code FROM qrs q
JOIN doors d ON (d.id = q.door_id)
JOIN oauth2_authorized_client c ON (c.client_registration_id = d.unit_id AND c.principal_name = d.principal_name)
WHERE c.client_registration_id = ? AND q.start_date_time <= CURRENT_TIMESTAMP AND q.end_date_time >= CURRENT_TIMESTAMP
"""
@Repository
class QrRepository(private val template: JdbcTemplate) {
fun getActualQrCodesByDoorIds(doorIds: Array<String>): List<QrCode> {
return when {
doorIds.isNotEmpty() -> template.query({ conn ->
val doorIdsDbArray = conn.createArrayOf("TEXT", doorIds)
val stmt = conn.prepareStatement(GET_QRS_BY_DOOR_IDS)
stmt.setArray(1, doorIdsDbArray)
fun getActualQrCodesByUnitId(unitId: UUID): List<QrCode> {
val query = GET_ACTUAL_QRS_BY_UNIT_ID.trimIndent()
return template.query({ conn ->
val stmt = conn.prepareStatement(query)
stmt.setString(1, unitId.toString())
stmt
}, { rs, _ ->
QrCode(
@ -27,8 +30,6 @@ class QrRepository(private val template: JdbcTemplate) {
UUID.fromString(rs.getString("key_code"))
)
})
}
else -> listOf()
}
}
}

View File

@ -3,13 +3,13 @@ package ru.vyatsu.qr_access_api.service
import org.springframework.stereotype.Service
import ru.vyatsu.models.QrCode
import ru.vyatsu.qr_access_api.repository.QrRepository
import java.util.*
@Service
class QrSyncService(val qrRepository: QrRepository) {
fun getQrCodes(): List<QrCode> {
// TODO: Тут логика с извлечением клайма из jwt в котором идентификатор клиента лежит
val extractedDoorIds = arrayOf("945c8621-9adc-4a49-bc56-10253d27c581", "4dbf27d7-df77-493d-b970-67f8a5178eb9")
// TODO: Переделать на передачу unitId и извлечь из бд unit и двери, которые ему принадлежат
return qrRepository.getActualQrCodesByDoorIds(extractedDoorIds)
val extractedUnitId = UUID.fromString("945c8621-9adc-4a49-bc56-10253d27c581")
return qrRepository.getActualQrCodesByUnitId(extractedUnitId)
}
}