Return uppercase country name list for country search API
All checks were successful
build-and-deploy / build-deploy (push) Successful in 35s

This commit is contained in:
androidlover5842
2026-02-07 17:01:56 +05:30
parent c39188d453
commit 0441683d55
3 changed files with 8 additions and 26 deletions

View File

@@ -157,7 +157,8 @@ AUTH + SYSTEM APIS
- Searches countries from local country_reference table. - Searches countries from local country_reference table.
- Case-insensitive match on country name, official name, ISO alpha-2, and ISO alpha-3. - Case-insensitive match on country name, official name, ISO alpha-2, and ISO alpha-3.
- Example: q=IND returns matches like India and related country names. - Returns JSON array of uppercase country names only.
- Example: q=IND can return ["INDIA", "INDONESIA", ...].
Request body: Request body:

View File

@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.RestController
import org.springframework.web.server.ResponseStatusException import org.springframework.web.server.ResponseStatusException
import java.util.Locale
@RestController @RestController
class CountrySearch( class CountrySearch(
@@ -16,7 +17,7 @@ class CountrySearch(
fun searchCountries( fun searchCountries(
@RequestParam("q") q: String, @RequestParam("q") q: String,
@RequestParam("limit", required = false, defaultValue = "20") limit: Int @RequestParam("limit", required = false, defaultValue = "20") limit: Int
): List<CountrySearchResponse> { ): List<String> {
val query = q.trim() val query = q.trim()
if (query.length < 3) { if (query.length < 3) {
throw ResponseStatusException(HttpStatus.BAD_REQUEST, "q must be at least 3 characters") throw ResponseStatusException(HttpStatus.BAD_REQUEST, "q must be at least 3 characters")
@@ -24,20 +25,6 @@ class CountrySearch(
val boundedLimit = limit.coerceIn(1, 100) val boundedLimit = limit.coerceIn(1, 100)
return countryReferenceRepo return countryReferenceRepo
.searchCountries(query, PageRequest.of(0, boundedLimit)) .searchCountries(query, PageRequest.of(0, boundedLimit))
.map { .map { it.name.uppercase(Locale.ROOT) }
CountrySearchResponse(
name = it.name,
officialName = it.officialName,
isoAlpha2 = it.isoAlpha2,
isoAlpha3 = it.isoAlpha3
)
}
} }
} }
data class CountrySearchResponse(
val name: String,
val officialName: String?,
val isoAlpha2: String?,
val isoAlpha3: String?
)

View File

@@ -9,10 +9,7 @@ import org.springframework.data.repository.query.Param
interface CountryReferenceRepo : JpaRepository<CountryReference, Long> { interface CountryReferenceRepo : JpaRepository<CountryReference, Long> {
@Query( @Query(
""" """
select c.name as name, select c.name as name
c.officialName as officialName,
c.isoAlpha2 as isoAlpha2,
c.isoAlpha3 as isoAlpha3
from CountryReference c from CountryReference c
where trim(c.name) <> '' where trim(c.name) <> ''
and ( and (
@@ -35,12 +32,9 @@ interface CountryReferenceRepo : JpaRepository<CountryReference, Long> {
fun searchCountries( fun searchCountries(
@Param("query") query: String, @Param("query") query: String,
pageable: Pageable pageable: Pageable
): List<CountrySearchRow> ): List<CountryNameRow>
} }
interface CountrySearchRow { interface CountryNameRow {
val name: String val name: String
val officialName: String?
val isoAlpha2: String?
val isoAlpha3: String?
} }