diff --git a/api.http b/api.http index 5c75b21..69bd308 100644 --- a/api.http +++ b/api.http @@ -5,14 +5,14 @@ Authorization: {{auth-token}} { "data": { - "number": "KA01HD6667", + "number": "KA01HD6677", "owner": "gowthaman" }, "uniqueIdentifier": "" } ### create row -POST http://localhost:9001/api/vendor +POST http://localhost:9001/api/vendor/po Content-Type: application/json Authorization: {{auth-token}} @@ -58,7 +58,7 @@ Authorization: Bearer {{auth-token}} ### query row POST http://localhost:9001/api/vehicle/query Content-Type: application/json -Authorization: set-auth-token +Authorization: {{set-auth-token}} { "sql": "select sys_pk, tenant_id, deleted_on, deleted_by, deleted, version, created_at, modified_at, created_by, modified_by, data, tags, comments, unique_identifier, entity_name from data_model where data ->> 'number' = :number", @@ -94,5 +94,41 @@ DELETE http://localhost:9001/api/vehicle/KA01HD6667 Authorization: {{auth-token}} ### get po for id -GET http://localhost:9001/api/vendor/po/12345 +GET http://localhost:9001/api/vendor/product +Authorization: {{auth-token}} + +### get product for id +GET http://localhost:9001/api/vendor/product/7 +Authorization: {{auth-token}} + +### get row +GET http://localhost:9001/api/vendor/product/7 +Authorization: Bearer {{auth-token}} + +### create product +POST http://localhost:9001/api/vendor/product +Content-Type: application/json +Authorization: {{auth-token}} + +{ + "name": "Shirt", + "description": "Black Shirt", + "hsnCode": "BSM1XL" + +} + +### update field +PATCH http://localhost:9001/api/vendor/product/11 +Content-Type: application/json +Authorization: {{auth-token}} + + +### upate a row +PUT http://localhost:9001/api/vendor/product/11 +Content-Type: application/json +Authorization: {{auth-token}} + + +### delete a row +DELETE http://localhost:9001/api/vendor/product/2 Authorization: {{auth-token}} \ No newline at end of file diff --git a/src/main/kotlin/com/restapi/Main.kt b/src/main/kotlin/com/restapi/Main.kt index 2389d6a..6bed341 100644 --- a/src/main/kotlin/com/restapi/Main.kt +++ b/src/main/kotlin/com/restapi/Main.kt @@ -6,6 +6,7 @@ import com.restapi.config.AppConfig.Companion.appConfig import com.restapi.config.Auth.validateAuthToken import com.restapi.controllers.* import com.restapi.domain.DataNotFoundException +import com.restapi.domain.Product import com.restapi.domain.Session import com.restapi.domain.Session.currentTenant import com.restapi.domain.Session.currentUser @@ -22,7 +23,6 @@ import io.javalin.http.UnauthorizedResponse import io.javalin.http.util.NaiveRateLimit import io.javalin.http.util.RateLimitUtil import io.javalin.json.JavalinJackson -import org.checkerframework.dataflow.qual.Pure import org.jose4j.jwt.consumer.InvalidJwtException import org.slf4j.LoggerFactory import java.security.MessageDigest @@ -135,10 +135,12 @@ fun main(args: Array) { delete("/{id}", Quotation::delete, Roles(Role.Explicit(listOf("ROLE_QUOTE_CREATE", "ROLE_ADMIN")))) } path("/product"){ - post("", Product::create, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN")))) - get("/{id}", Product::get, Roles(Role.Explicit(listOf("ROLE_DOC_VIEW", "ROLE_ADMIN", "ROLE_PRODUCT_CREATE")))) - delete("{id}", Product::delete, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN")))) - get("/doc/{id}", Product::getDoc, Roles(Role.Explicit(listOf("ROLE_ADMIN", "ROLE_VIEW_DOC")))) + post("", ProductCtrl::create, Roles(Role.Explicit(listOf("ROLE_PRODUCT_CREATE", "ROLE_ADMIN")))) + //get("/{hsnCode}", ProductCtrl::get, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN")))) + put("/{id}", ProductCtrl::update, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN")))) + //patch("/{id}", ProductCtrl::patch, Roles(Role.Explicit(listOf("ROLE_PRODUCT_UPDATE", "ROLE_ADMIN")))) + delete("/{id}", ProductCtrl::delete, Roles(Role.Explicit(listOf("ROLE_PRODUCT_DELETE", "ROLE_ADMIN")))) + get("", ProductCtrl::getAll, Roles(Role.Explicit(listOf("ROLE_PRODUCT_VIEW", "ROLE_ADMIN")))) } path("/doc"){ post("", Document::create, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE", "ROLE_ADMIN")))) @@ -149,9 +151,9 @@ fun main(args: Array) { delete("/{id}", Document::delete, Roles(Role.Explicit(listOf("ROLE_DOC_CREATE")))) } path("/reqForQuote"){ - post("", ReqForQuote::create, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE")))) - get("/{id}", ReqForQuote::get, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE", "ROLE_RFQ_VIEW")))) - put("/{id}", ReqForQuote::update, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE")))) + post("", RequestForQuote::create, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE")))) + get("/{id}", RequestForQuote::get, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE", "ROLE_RFQ_VIEW")))) + put("/{id}", RequestForQuote::update, Roles(Role.Explicit(listOf("ROLE_RFQ_CREATE")))) } } post("/script/database/{name}", Entities::executeStoredProcedure, Roles(adminRole, Role.DbOps)) diff --git a/src/main/kotlin/com/restapi/controllers/Entities.kt b/src/main/kotlin/com/restapi/controllers/Entities.kt index 96b088c..8654c34 100644 --- a/src/main/kotlin/com/restapi/controllers/Entities.kt +++ b/src/main/kotlin/com/restapi/controllers/Entities.kt @@ -6,6 +6,7 @@ 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.Product import com.restapi.domain.PurchaseOrder import com.restapi.domain.Quotation import com.restapi.domain.Session.currentUser @@ -411,6 +412,45 @@ object PurchaseOrder { } } +data class ProductSearch( + var isSort: String? = null + +) + +object ProductCtrl { + fun get(ctx :Context){ + val hsnCode = ctx.pathParam("hsnCode") + val product = database.find(Product::class.java, hsnCode) ?: throw NotFoundResponse("Product not found for $hsnCode") + + ctx.json(product) + } + fun getAll(ctx: Context){ + val productList = Session.database.find(Product::class.java) + .findList() + .sortedBy { it.hsnCode } + + ctx.json(productList) + } + fun create(ctx :Context){ + val product = ctx.bodyAsClass() + database.save(product) + } + + fun delete(ctx: Context) { + val id = ctx.pathParam("id") + val product = database.delete(Product::class.java, id) + } + + fun patch(ctx: Context) { + + } + + fun update(ctx: Context) { + val id = ctx.pathParam("id") + + } +} + object Quotation { fun get(ctx :Context){ val id = ctx.pathParam("id") @@ -451,37 +491,13 @@ object Quotation { } fun reqForQuote(ctx :Context){ val reqForQuoteNum = ctx.pathParam(("rfqNum")) - val rfq = database.find(ReqForQuote::class.java) - .where() - .eq("reqForQuoteNum", reqForQuoteNum) - ?: throw NotFoundResponse("request for quote not found for this quotation") + val rfq = database.find(RequestForQuote::class.java) + .where() + .eq("reqForQuoteNum", reqForQuoteNum) + ?: throw NotFoundResponse("request for quote not found for this quotation") ctx.json(rfq) } } -object Product { - fun get(ctx :Context){ - val id = ctx.pathParam("id") - val product = database.find(Product::class.java, id) ?: throw NotFoundResponse("product nor found for id $id") - ctx.json(product) - } - fun create(ctx :Context){ - val product = ctx.bodyAsClass() - database.save(product) - ctx.result("product created") - } - fun update(ctx :Context){ - - } - fun delete(ctx: Context){ - val id = ctx.pathParam(("id")) - val product = database.find(Product::class.java, id) ?:throw NotFoundResponse("product not found for id $id") - //product.delete() - ctx.result("product with id $id deleted") - } - fun getDoc(ctx :Context){ - - } -} object Document { fun get(ctx :Context){ val id = ctx.pathParam("id") @@ -556,9 +572,9 @@ object Vendor { ctx.result("rating changed") } } -object ReqForQuote { +object RequestForQuote { fun create(ctx :Context) { - val rfq = ctx.bodyAsClass() + val rfq = ctx.bodyAsClass() database.save(rfq) //ctx.result("request for quote created") //ctx.json(rfq) @@ -567,7 +583,7 @@ object ReqForQuote { } fun get(ctx :Context){ val id = ctx.pathParam("id") - val rfq = database.find(com.restapi.domain.ReqForQuote::class.java, id) ?: throw NotFoundResponse("request for quote not found for id $id") + val rfq = database.find(ReqForQuote::class.java, id) ?: throw NotFoundResponse("request for quote not found for id $id") ctx.json(rfq) } fun update(ctx :Context){ diff --git a/src/main/kotlin/com/restapi/domain/models.kt b/src/main/kotlin/com/restapi/domain/models.kt index 2c444cd..2753361 100644 --- a/src/main/kotlin/com/restapi/domain/models.kt +++ b/src/main/kotlin/com/restapi/domain/models.kt @@ -274,6 +274,7 @@ enum class UOM { } @Entity open class Product :BaseTenantModel() { + var id: Int? = null var name :String = "" var description :String = "" var hsnCode :String = "" @@ -322,8 +323,8 @@ open class ReqForQuote :BaseTenantModel() { var potentialVendors :List? = null @Enumerated(EnumType.STRING) var status :RFQStatus? = null - @DbArray - var docs :List? = null +// @DbArray +// var docs :List? = null @DbJsonB var products :List? = null var reqForQuoteNum: String? = null