From d5d659811d16fccba36c08c0f324a647a9236fb1 Mon Sep 17 00:00:00 2001
From: kashiuno <taigusiobaka@gmail.com>
Date: Sat, 4 Jan 2025 16:02:29 +0300
Subject: [PATCH] Change logic for qrs gettings

---
 .../qr_access_api/repository/QrRepository.kt  | 41 ++++++++++---------
 .../qr_access_api/service/QrSyncService.kt    |  6 +--
 2 files changed, 24 insertions(+), 23 deletions(-)

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<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)
-                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<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(
+                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<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)
     }
 }
\ No newline at end of file