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,29 +6,30 @@ import ru.vyatsu.models.QrCode
import java.time.ZoneOffset import java.time.ZoneOffset
import java.util.* import java.util.*
private const val GET_QRS_BY_DOOR_IDS = private const val GET_ACTUAL_QRS_BY_UNIT_ID = """
"SELECT key_code, door_id, start_date_time, end_date_time FROM qrs WHERE door_id IN (?)" 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 @Repository
class QrRepository(private val template: JdbcTemplate) { class QrRepository(private val template: JdbcTemplate) {
fun getActualQrCodesByDoorIds(doorIds: Array<String>): List<QrCode> { fun getActualQrCodesByUnitId(unitId: UUID): List<QrCode> {
return when { val query = GET_ACTUAL_QRS_BY_UNIT_ID.trimIndent()
doorIds.isNotEmpty() -> template.query({ conn -> return template.query({ conn ->
val doorIdsDbArray = conn.createArrayOf("TEXT", doorIds) val stmt = conn.prepareStatement(query)
val stmt = conn.prepareStatement(GET_QRS_BY_DOOR_IDS) stmt.setString(1, unitId.toString())
stmt.setArray(1, doorIdsDbArray) stmt
stmt }, { rs, _ ->
}, { rs, _ -> QrCode(
QrCode( rs.getTimestamp("start_date_time").toLocalDateTime().atOffset(ZoneOffset.UTC),
rs.getTimestamp("start_date_time").toLocalDateTime().atOffset(ZoneOffset.UTC), rs.getTimestamp("end_date_time").toLocalDateTime().atOffset(ZoneOffset.UTC),
rs.getTimestamp("end_date_time").toLocalDateTime().atOffset(ZoneOffset.UTC), UUID.fromString(rs.getString("door_id")),
UUID.fromString(rs.getString("door_id")), UUID.fromString(rs.getString("key_code"))
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 org.springframework.stereotype.Service
import ru.vyatsu.models.QrCode import ru.vyatsu.models.QrCode
import ru.vyatsu.qr_access_api.repository.QrRepository import ru.vyatsu.qr_access_api.repository.QrRepository
import java.util.*
@Service @Service
class QrSyncService(val qrRepository: QrRepository) { class QrSyncService(val qrRepository: QrRepository) {
fun getQrCodes(): List<QrCode> { fun getQrCodes(): List<QrCode> {
// TODO: Тут логика с извлечением клайма из jwt в котором идентификатор клиента лежит // TODO: Тут логика с извлечением клайма из jwt в котором идентификатор клиента лежит
val extractedDoorIds = arrayOf("945c8621-9adc-4a49-bc56-10253d27c581", "4dbf27d7-df77-493d-b970-67f8a5178eb9") val extractedUnitId = UUID.fromString("945c8621-9adc-4a49-bc56-10253d27c581")
// TODO: Переделать на передачу unitId и извлечь из бд unit и двери, которые ему принадлежат return qrRepository.getActualQrCodesByUnitId(extractedUnitId)
return qrRepository.getActualQrCodesByDoorIds(extractedDoorIds)
} }
} }