From 419c8554637c8a1997e33b8f67dbae1c15e47ace Mon Sep 17 00:00:00 2001 From: "gowthaman.b" Date: Mon, 13 Nov 2023 21:35:57 +0530 Subject: [PATCH] refractor query params --- .../com/restapi/controllers/Entities.kt | 59 +++++++++++++++---- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/com/restapi/controllers/Entities.kt b/src/main/kotlin/com/restapi/controllers/Entities.kt index 361a8c8..0d4dd2e 100644 --- a/src/main/kotlin/com/restapi/controllers/Entities.kt +++ b/src/main/kotlin/com/restapi/controllers/Entities.kt @@ -1,5 +1,10 @@ package com.restapi.controllers +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.JsonDeserializer +import com.fasterxml.jackson.databind.JsonNode +import com.fasterxml.jackson.databind.annotation.JsonDeserialize import com.restapi.domain.* import com.restapi.domain.Session.currentUser import com.restapi.domain.Session.database @@ -22,25 +27,57 @@ enum class QueryParamType { STRING, NUMBER, DATETIME, DATE } -data class QueryParam(val type: QueryParamType, val value: String) { - fun getValue(): Any { - return when (type) { - QueryParamType.STRING -> value - QueryParamType.NUMBER -> if (value.matches(Regex("\\d+"))) value.toLong() else value.toDouble() - QueryParamType.DATETIME -> LocalDateTime.parse(value, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) - QueryParamType.DATE -> LocalDate.parse(value, DateTimeFormatter.ofPattern("yyyy-MM-dd")) - } - } -} data class RawQuery( val sql: String, val params: Map ) + data class QueryById( val params: List ) +@JsonDeserialize(using = QueryByIdParamsDeSerializer::class) +sealed class QueryParam { + data class Simple(val simple: String) : QueryParam() + data class Complex(val type: QueryParamType, val value: String) : QueryParam() { + fun getValueComplex(): Any { + return when (type) { + QueryParamType.STRING -> value + QueryParamType.NUMBER -> if (value.matches(Regex("\\d+"))) value.toLong() else value.toDouble() + QueryParamType.DATETIME -> LocalDateTime.parse( + value, + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") + ) + + QueryParamType.DATE -> LocalDate.parse(value, DateTimeFormatter.ofPattern("yyyy-MM-dd")) + } + } + } + + fun getValue(): Any { + return when (this) { + is Complex -> getValueComplex() + is Simple -> simple + } + } +} + +class QueryByIdParamsDeSerializer : JsonDeserializer() { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): QueryParam { + val node = p.readValueAsTree() + return if (node.isTextual) { + QueryParam.Simple(node.asText()) + } else { + QueryParam.Complex( + QueryParamType.valueOf(node.get("type").textValue()), + node.get("value").textValue(), + ) + } + } + +} + enum class ResultType { INTEGER, DECIMAL, STRING, DATETIME, ARRAY, OBJECT } @@ -182,7 +219,7 @@ object Entities { .setRawSql(RawSqlBuilder.parse(query.sql).create()) .apply { sql.params.forEachIndexed { index, entry -> - setParameter(index+1, entry.getValue()) + setParameter(index + 1, entry.getValue()) } } .findList()