some updates

This commit is contained in:
gowthaman.b 2024-02-09 14:49:25 +05:30
parent fc94c7aacc
commit 338f86a5f5
2 changed files with 148 additions and 58 deletions

View File

@ -0,0 +1,74 @@
package com.restapi
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.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import com.restapi.controllers.QueryParam
import com.restapi.controllers.RawQuery
class FDeserializer : JsonDeserializer<F>() {
override fun deserialize(p: JsonParser, p1: DeserializationContext?): F {
//custom logic to do thia
val node = p.readValueAsTree<JsonNode>()
if (node.isObject) {
if (node.has("name")) {
return F.P(name = node.get("name").textValue())
} else if (node.has("num")) {
return F.Q(num = node.get("num").textValue())
} else if (node.has("tag")) {
return F.D(tag = node.get("tag").textValue())
}
} else {
//incorrect
}
throw IllegalArgumentException()
}
}
val om = jacksonObjectMapper()
@JsonDeserialize(using = FDeserializer::class)
sealed interface F {
data class P(val name: String) : F
data class Q(val num: String) : F
data class D(val tag: String) : F
}
val j = """
{"name":"a"}
""".trimIndent()
val j2 = """
{"num":"a"}
""".trimIndent()
val j3 = """
{"tag":"a"}
""".trimIndent()
val j4 = """
{
"sql":"aaaa",
"params": {
"a":"b",
"c": {
"type":"STRING",
"value":"aaaa"
}
}
}
""".trimIndent()
fun main() {
println(om.readValue<F>(j))
println(om.readValue<F>(j2))
println(om.readValue<F>(j3))
println(om.readValue<RawQuery>(j4))
}

View File

@ -1,16 +1,16 @@
package com.restapi.controllers
import com.restapi.domain.*
import com.restapi.domain.Quotation
import com.restapi.domain.Session.database
import java.time.LocalDate
//constants
const val IGNORE = "%"
val baseDate :LocalDate = LocalDate.of(1500, 1,1, )
val baseDate: LocalDate = LocalDate.of(1500, 1, 1)
val maxDate: LocalDate = LocalDate.of(3000, 1, 1)
const val RATING_MAX = 10.0
const val RATING_MIN = 0.0
//common filters would be used by most of the handlers
//require a list of vendor ids to be passed
data class CommonFilters(
@ -20,7 +20,9 @@ data class CommonFilters (
val sortAsc: Boolean = true,
val sortBy: String = IGNORE
)
interface CustomFilters {}
data class POFilters(
val poNumLike: String = IGNORE,
val totalAmountExceeds: Long = Long.MIN_VALUE,
@ -29,22 +31,26 @@ data class POFilters (
val validBefore: LocalDate = maxDate,
val refQuotation: String = IGNORE,
) : CustomFilters
data class ProductFilters(
val nameLike: String = IGNORE,
val hsnLike: String = IGNORE,
val uom: UOM = UOM.ALL,
) : CustomFilters
data class DocumentFilters(
val nameLike: String = IGNORE,
val typeOfDoc: DocType = DocType.ALL,
val docDateFrom: LocalDate = baseDate,
val docDataTo: LocalDate = maxDate,
) : CustomFilters
data class RFQFilters(
val validBefore: LocalDate = maxDate,
val validAfter: LocalDate = baseDate,
val reqForQuoteNumLike: String = IGNORE,
)
): CustomFilters
data class QuoteFilters(
val quoteNumLike: String = IGNORE,
val validBefore: LocalDate = maxDate,
@ -52,6 +58,7 @@ data class QuoteFilters (
val totalAmountExceeds: Long = Long.MIN_VALUE,
val totalAmountLessThan: Long = Long.MAX_VALUE,
) : CustomFilters
data class VendorFilters(
val nameLike: String = IGNORE,
val msmeLike: String = IGNORE,
@ -60,6 +67,7 @@ data class VendorFilters (
val ratingExceeds: Double = RATING_MIN,
val ratingLessThan: Double = RATING_MAX,
) : CustomFilters
fun <T> applyVendorHelper(q: io.ebean.ExpressionList<T>, vids: List<Long>?) {
if (vids.isNullOrEmpty()) return
// q.apply {
@ -69,19 +77,23 @@ fun<T> applyVendorHelper(q :io.ebean.ExpressionList<T>, vids :List<Long>?) {
// println(vids[0])
q.eq("vendor_sys_pk", vids[0])
}
fun <T> applySortHelper(q: io.ebean.ExpressionList<T>, sortBy: String, asc: Boolean) {
if (sortBy == IGNORE) return;
val order = if (asc) "ASC" else "DESC"
q.orderBy("$sortBy $order")
}
fun <T> applyFromToHelper(q: io.ebean.ExpressionList<T>, fromDate: LocalDate, toDate: LocalDate, colName: String) {
q.ge(colName, fromDate)
.le(colName, toDate)
}
fun <T> applyCommonFilters(q: io.ebean.ExpressionList<T>, commonFilters: CommonFilters) {
applyVendorHelper<T>(q, commonFilters.vendor)
applySortHelper<T>(q, commonFilters.sortBy, commonFilters.sortAsc)
}
fun searchQuotes(commonFilters: CommonFilters, quoteFilters: QuoteFilters): List<Quotation> {
val q = database.find(Quotation::class.java)
.where()
@ -97,6 +109,7 @@ fun searchQuotes(commonFilters: CommonFilters, quoteFilters: QuoteFilters) : Lis
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList()
}
fun searchVendors(commonFilters: CommonFilters, vendorFilters: VendorFilters): List<Vendor> {
val q = database.find(Vendor::class.java)
.where()
@ -109,6 +122,7 @@ fun searchVendors(commonFilters: CommonFilters, vendorFilters: VendorFilters) :
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList()
}
fun searchDocs(commonFilters: CommonFilters, documentFilters: DocumentFilters): List<Document> {
val q = database.find(Document::class.java)
.where()
@ -122,6 +136,7 @@ fun searchDocs(commonFilters: CommonFilters, documentFilters: DocumentFilters) :
applyVendorHelper(q, commonFilters.vendor)
return q.findList()
}
fun searchPos(commonFilters: CommonFilters, poFilters: POFilters?): List<PurchaseOrder> {
val poFilters = poFilters ?: POFilters()
val q = database.find(PurchaseOrder::class.java)
@ -137,6 +152,7 @@ fun searchPos(commonFilters: CommonFilters, poFilters: POFilters?) : List<Purcha
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList()
}
fun searchRFQ(commonFilters: CommonFilters, rfqFilters: RFQFilters): List<ReqForQuote> {
val q = database.find(ReqForQuote::class.java)
.where()