Filter data.gov records by pin code
All checks were successful
build-and-deploy / build-deploy (push) Successful in 32s
All checks were successful
build-and-deploy / build-deploy (push) Successful in 32s
This commit is contained in:
@@ -29,7 +29,7 @@ class DataGovPincodeClient(
|
|||||||
.toUriString()
|
.toUriString()
|
||||||
val response = restTemplate.getForEntity(url, String::class.java)
|
val response = restTemplate.getForEntity(url, String::class.java)
|
||||||
val body = response.body ?: return PincodeLookupResult(null, null, "EMPTY_BODY", "data.gov.in")
|
val body = response.body ?: return PincodeLookupResult(null, null, "EMPTY_BODY", "data.gov.in")
|
||||||
val resolved = parseCityState(body)
|
val resolved = parseCityState(body, pinCode)
|
||||||
val status = if (resolved == null) "ZERO_RESULTS" else "OK"
|
val status = if (resolved == null) "ZERO_RESULTS" else "OK"
|
||||||
PincodeLookupResult(resolved, body, status, "data.gov.in")
|
PincodeLookupResult(resolved, body, status, "data.gov.in")
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
@@ -38,11 +38,16 @@ class DataGovPincodeClient(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseCityState(body: String): String? {
|
private fun parseCityState(body: String, pinCode: String): String? {
|
||||||
val root = objectMapper.readTree(body)
|
val root = objectMapper.readTree(body)
|
||||||
val records = root.path("records")
|
val records = root.path("records")
|
||||||
if (!records.isArray || records.isEmpty) return null
|
if (!records.isArray || records.isEmpty) return null
|
||||||
val chosen = chooseRecord(records) ?: return null
|
val filtered = records.filter { record ->
|
||||||
|
val recordPin = record.path("pincode").asText(null)
|
||||||
|
recordPin?.trim() == pinCode
|
||||||
|
}
|
||||||
|
if (filtered.isEmpty()) return null
|
||||||
|
val chosen = chooseRecord(filtered) ?: return null
|
||||||
val district = chosen.path("district").asText(null)
|
val district = chosen.path("district").asText(null)
|
||||||
val state = chosen.path("statename").asText(null)
|
val state = chosen.path("statename").asText(null)
|
||||||
val districtName = district?.let { toTitleCase(it) }
|
val districtName = district?.let { toTitleCase(it) }
|
||||||
@@ -51,7 +56,7 @@ class DataGovPincodeClient(
|
|||||||
return listOfNotNull(districtName?.ifBlank { null }, stateName?.ifBlank { null }).joinToString(", ")
|
return listOfNotNull(districtName?.ifBlank { null }, stateName?.ifBlank { null }).joinToString(", ")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun chooseRecord(records: JsonNode): JsonNode? {
|
private fun chooseRecord(records: List<JsonNode>): JsonNode? {
|
||||||
val delivery = records.firstOrNull { it.path("delivery").asText("").equals("Delivery", true) }
|
val delivery = records.firstOrNull { it.path("delivery").asText("").equals("Delivery", true) }
|
||||||
return delivery ?: records.firstOrNull()
|
return delivery ?: records.firstOrNull()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user