diff --git a/src/main/kotlin/ru/vyatsu/qr_access_api/repository/QrRepository.kt b/src/main/kotlin/ru/vyatsu/qr_access_api/repository/QrRepository.kt index e26189c..75aecb7 100644 --- a/src/main/kotlin/ru/vyatsu/qr_access_api/repository/QrRepository.kt +++ b/src/main/kotlin/ru/vyatsu/qr_access_api/repository/QrRepository.kt @@ -6,29 +6,30 @@ 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): List { - 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) - stmt - }, { rs, _ -> - QrCode( - rs.getTimestamp("start_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("key_code")) - ) - }) - - else -> listOf() - } + fun getActualQrCodesByUnitId(unitId: UUID): List { + 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( + rs.getTimestamp("start_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("key_code")) + ) + }) } + } \ No newline at end of file diff --git a/src/main/kotlin/ru/vyatsu/qr_access_api/service/QrSyncService.kt b/src/main/kotlin/ru/vyatsu/qr_access_api/service/QrSyncService.kt index 8e5ef85..b09ed91 100644 --- a/src/main/kotlin/ru/vyatsu/qr_access_api/service/QrSyncService.kt +++ b/src/main/kotlin/ru/vyatsu/qr_access_api/service/QrSyncService.kt @@ -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 { // 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) } } \ No newline at end of file