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,66 +1,74 @@
package com.restapi.controllers package com.restapi.controllers
import com.restapi.domain.* import com.restapi.domain.*
import com.restapi.domain.Quotation
import com.restapi.domain.Session.database import com.restapi.domain.Session.database
import java.time.LocalDate import java.time.LocalDate
//constants //constants
const val IGNORE = "%" 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) val maxDate: LocalDate = LocalDate.of(3000, 1, 1)
const val RATING_MAX = 10.0 const val RATING_MAX = 10.0
const val RATING_MIN = 0.0 const val RATING_MIN = 0.0
//common filters would be used by most of the handlers //common filters would be used by most of the handlers
//require a list of vendor ids to be passed //require a list of vendor ids to be passed
data class CommonFilters ( data class CommonFilters(
val fromDate :LocalDate = baseDate, val fromDate: LocalDate = baseDate,
val toDate :LocalDate = maxDate, val toDate: LocalDate = maxDate,
val vendor :List<Long>? = null, val vendor: List<Long>? = null,
val sortAsc :Boolean = true, val sortAsc: Boolean = true,
val sortBy :String = IGNORE val sortBy: String = IGNORE
) )
interface CustomFilters{}
data class POFilters ( interface CustomFilters {}
val poNumLike :String = IGNORE,
val totalAmountExceeds :Long = Long.MIN_VALUE, data class POFilters(
val totalAmountLessThan :Long = Long.MAX_VALUE, val poNumLike: String = IGNORE,
val totalAmountExceeds: Long = Long.MIN_VALUE,
val totalAmountLessThan: Long = Long.MAX_VALUE,
val validAfter: LocalDate = baseDate, val validAfter: LocalDate = baseDate,
val validBefore: LocalDate = maxDate, val validBefore: LocalDate = maxDate,
val refQuotation :String = IGNORE, val refQuotation: String = IGNORE,
) : CustomFilters ) : CustomFilters
data class ProductFilters (
val nameLike :String = IGNORE, data class ProductFilters(
val hsnLike :String = IGNORE, val nameLike: String = IGNORE,
val uom :UOM = UOM.ALL, val hsnLike: String = IGNORE,
val uom: UOM = UOM.ALL,
) : CustomFilters ) : CustomFilters
data class DocumentFilters (
val nameLike :String = IGNORE, data class DocumentFilters(
val typeOfDoc :DocType = DocType.ALL, val nameLike: String = IGNORE,
val docDateFrom :LocalDate = baseDate, val typeOfDoc: DocType = DocType.ALL,
val docDataTo :LocalDate = maxDate, val docDateFrom: LocalDate = baseDate,
) :CustomFilters val docDataTo: LocalDate = maxDate,
data class RFQFilters ( ) : CustomFilters
val validBefore :LocalDate = maxDate,
val validAfter :LocalDate = baseDate, data class RFQFilters(
val reqForQuoteNumLike :String = IGNORE, val validBefore: LocalDate = maxDate,
) val validAfter: LocalDate = baseDate,
data class QuoteFilters ( val reqForQuoteNumLike: String = IGNORE,
val quoteNumLike :String = IGNORE, ): CustomFilters
val validBefore :LocalDate = maxDate,
val validAfter :LocalDate = baseDate, data class QuoteFilters(
val totalAmountExceeds :Long = Long.MIN_VALUE, val quoteNumLike: String = IGNORE,
val totalAmountLessThan :Long = Long.MAX_VALUE, val validBefore: LocalDate = maxDate,
) :CustomFilters val validAfter: LocalDate = baseDate,
data class VendorFilters ( val totalAmountExceeds: Long = Long.MIN_VALUE,
val nameLike :String = IGNORE, val totalAmountLessThan: Long = Long.MAX_VALUE,
val msmeLike :String = IGNORE, ) : CustomFilters
val gstNumLike :String = IGNORE,
val addressLike :String = IGNORE, data class VendorFilters(
val ratingExceeds :Double = RATING_MIN, val nameLike: String = IGNORE,
val ratingLessThan :Double = RATING_MAX, val msmeLike: String = IGNORE,
) :CustomFilters val gstNumLike: String = IGNORE,
fun<T> applyVendorHelper(q :io.ebean.ExpressionList<T>, vids :List<Long>?) { val addressLike: String = IGNORE,
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 if (vids.isNullOrEmpty()) return
// q.apply { // q.apply {
// q.`in`("vendor", vids) // q.`in`("vendor", vids)
@ -69,35 +77,40 @@ fun<T> applyVendorHelper(q :io.ebean.ExpressionList<T>, vids :List<Long>?) {
// println(vids[0]) // println(vids[0])
q.eq("vendor_sys_pk", 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; fun <T> applySortHelper(q: io.ebean.ExpressionList<T>, sortBy: String, asc: Boolean) {
if (sortBy == IGNORE) return;
val order = if (asc) "ASC" else "DESC" val order = if (asc) "ASC" else "DESC"
q.orderBy("$sortBy $order") q.orderBy("$sortBy $order")
} }
fun<T> applyFromToHelper(q :io.ebean.ExpressionList<T>, fromDate: LocalDate, toDate: LocalDate, colName :String) {
fun <T> applyFromToHelper(q: io.ebean.ExpressionList<T>, fromDate: LocalDate, toDate: LocalDate, colName: String) {
q.ge(colName, fromDate) q.ge(colName, fromDate)
.le(colName, toDate) .le(colName, toDate)
} }
fun<T> applyCommonFilters(q :io.ebean.ExpressionList<T>, commonFilters: CommonFilters) {
fun <T> applyCommonFilters(q: io.ebean.ExpressionList<T>, commonFilters: CommonFilters) {
applyVendorHelper<T>(q, commonFilters.vendor) applyVendorHelper<T>(q, commonFilters.vendor)
applySortHelper<T>(q, commonFilters.sortBy, commonFilters.sortAsc) applySortHelper<T>(q, commonFilters.sortBy, commonFilters.sortAsc)
} }
fun searchQuotes(commonFilters: CommonFilters, quoteFilters: QuoteFilters) : List<Quotation> {
fun searchQuotes(commonFilters: CommonFilters, quoteFilters: QuoteFilters): List<Quotation> {
val q = database.find(Quotation::class.java) val q = database.find(Quotation::class.java)
.where() .where()
.ge("quoteDate", commonFilters.fromDate) .ge("quoteDate", commonFilters.fromDate)
.le("quoteDate", commonFilters.toDate) .le("quoteDate", commonFilters.toDate)
.ge("validTill",quoteFilters.validAfter) .ge("validTill", quoteFilters.validAfter)
.le("validTill", quoteFilters.validBefore) .le("validTill", quoteFilters.validBefore)
.ge("totalAmount", quoteFilters.totalAmountExceeds) .ge("totalAmount", quoteFilters.totalAmountExceeds)
.le("totalAmount", quoteFilters.totalAmountLessThan) .le("totalAmount", quoteFilters.totalAmountLessThan)
.ilike("quoteNum", "%" + quoteFilters.quoteNumLike + "%") .ilike("quoteNum", "%" + quoteFilters.quoteNumLike + "%")
applyFromToHelper(q, commonFilters.fromDate, commonFilters.toDate, "quoteDate") applyFromToHelper(q, commonFilters.fromDate, commonFilters.toDate, "quoteDate")
applyVendorHelper(q, commonFilters.vendor) applyVendorHelper(q, commonFilters.vendor)
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc) applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList() return q.findList()
} }
fun searchVendors(commonFilters: CommonFilters, vendorFilters: VendorFilters) : List<Vendor> {
fun searchVendors(commonFilters: CommonFilters, vendorFilters: VendorFilters): List<Vendor> {
val q = database.find(Vendor::class.java) val q = database.find(Vendor::class.java)
.where() .where()
.ge("rating", vendorFilters.ratingExceeds) .ge("rating", vendorFilters.ratingExceeds)
@ -109,11 +122,12 @@ fun searchVendors(commonFilters: CommonFilters, vendorFilters: VendorFilters) :
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc) applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList() return q.findList()
} }
fun searchDocs(commonFilters: CommonFilters, documentFilters: DocumentFilters) : List<Document> {
fun searchDocs(commonFilters: CommonFilters, documentFilters: DocumentFilters): List<Document> {
val q = database.find(Document::class.java) val q = database.find(Document::class.java)
.where() .where()
.apply { .apply {
if(documentFilters.typeOfDoc != DocType.ALL){ if (documentFilters.typeOfDoc != DocType.ALL) {
this.eq("docType", documentFilters.typeOfDoc) this.eq("docType", documentFilters.typeOfDoc)
} }
} }
@ -122,7 +136,8 @@ fun searchDocs(commonFilters: CommonFilters, documentFilters: DocumentFilters) :
applyVendorHelper(q, commonFilters.vendor) applyVendorHelper(q, commonFilters.vendor)
return q.findList() return q.findList()
} }
fun searchPos(commonFilters: CommonFilters, poFilters: POFilters?) : List<PurchaseOrder> {
fun searchPos(commonFilters: CommonFilters, poFilters: POFilters?): List<PurchaseOrder> {
val poFilters = poFilters ?: POFilters() val poFilters = poFilters ?: POFilters()
val q = database.find(PurchaseOrder::class.java) val q = database.find(PurchaseOrder::class.java)
.where() .where()
@ -137,7 +152,8 @@ fun searchPos(commonFilters: CommonFilters, poFilters: POFilters?) : List<Purcha
applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc) applySortHelper(q, commonFilters.sortBy, commonFilters.sortAsc)
return q.findList() return q.findList()
} }
fun searchRFQ(commonFilters: CommonFilters, rfqFilters: RFQFilters) : List<ReqForQuote> {
fun searchRFQ(commonFilters: CommonFilters, rfqFilters: RFQFilters): List<ReqForQuote> {
val q = database.find(ReqForQuote::class.java) val q = database.find(ReqForQuote::class.java)
.where() .where()
.ge("validTill", rfqFilters.validAfter) .ge("validTill", rfqFilters.validAfter)