Change logic for qrs gettings
This commit is contained in:
parent
00afbd266d
commit
d5d659811d
@ -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"))
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user