diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f9163b4..ce1c62c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ + - + \ No newline at end of file diff --git a/src/main/kotlin/com/readymixerp/Main.kt b/src/main/kotlin/com/readymixerp/Main.kt index e823abc..33183d8 100644 --- a/src/main/kotlin/com/readymixerp/Main.kt +++ b/src/main/kotlin/com/readymixerp/Main.kt @@ -3,20 +3,13 @@ package com.readymixerp import com.readymixerp.domain.DataModel import com.readymixerp.domain.Session import com.readymixerp.domain.Session.database +import io.ebean.CallableSql import io.ebean.DuplicateKeyException -import io.ebean.RawSql import io.ebean.RawSqlBuilder import io.javalin.Javalin -import io.javalin.apibuilder.ApiBuilder.before -import io.javalin.apibuilder.ApiBuilder.get -import io.javalin.apibuilder.ApiBuilder.post -import io.javalin.apibuilder.ApiBuilder.delete -import io.javalin.apibuilder.ApiBuilder.path -import io.javalin.apibuilder.ApiBuilder.put -import io.javalin.apibuilder.ApiBuilder.patch +import io.javalin.apibuilder.ApiBuilder.* import io.javalin.http.* import io.javalin.json.JavalinJackson -import io.javalin.plugin.bundled.CorsContainer import java.time.LocalDateTime fun main(args: Array) { @@ -41,6 +34,17 @@ fun main(args: Array) { //validate, auth token } path("/api") { + post("/execute/{name}"){ + val name = it.pathParam("name") + val params = it.bodyAsClass>() + val placeholders = (0..params.entries.size).joinToString(",") { "?" } + val sql = "{call $name($placeholders)}" + val cs: CallableSql = database.createCallableSql(sql) + params.entries.forEachIndexed { index, entry -> + cs.setParameter(index + 1, entry.value) + } + database.execute(cs) + } get("/{entity}/{id}") { it.json( database.find(DataModel::class.java, it.pathParam("id")) ?: throw NotFoundResponse() @@ -63,7 +67,13 @@ fun main(args: Array) { } post("/{entity}") { database.save( - it.bodyAsClass() + it.bodyAsClass().apply { + this.entityName = it.pathParam("entity") + if(this.uniqueIdentifier.isEmpty()) { + //todo: set a counter + } + this.uniqueIdentifier = "${this.entityName}_${this.uniqueIdentifier}" + } ) } put("/{entity}/{id}") {