diff --git a/Sources/pom.xml b/Sources/pom.xml index bed0ed5..56bd3a7 100644 --- a/Sources/pom.xml +++ b/Sources/pom.xml @@ -8,6 +8,8 @@ allin-api allin-api + 1.8.10 + 1.5.0 2.3.4 official 1.9.10 @@ -51,6 +53,36 @@ ${ktor_version} test + + io.ktor + ktor-server-core + ${ktor_version} + + + com.h2database + h2 + 2.2.224 + + + io.ktor + ktor-server-content-negotiation-jvm + ${ktor_version} + + + io.ktor + ktor-server-html-builder-jvm + ${ktor_version} + + + io.ktor + ktor-serialization-kotlinx-json-jvm + ${ktor_version} + + + io.ktor + ktor-client-content-negotiation-jvm + ${ktor_version} + org.jetbrains.kotlin kotlin-test-junit @@ -63,6 +95,16 @@ 1.6.4 test + + org.jetbrains.kotlinx + kotlinx-serialization-core-jvm + 1.5.1 + + + io.ktor + ktor-server-content-negotiation-jvm + ${ktor_version} + ${project.basedir}/src/main/kotlin @@ -72,7 +114,6 @@ ${project.basedir}/src/main/resources - kotlin-maven-plugin @@ -138,6 +179,32 @@ + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + + + kotlinx-serialization + + + + + org.jetbrains.kotlin + kotlin-maven-serialization + ${kotlin.version} + + + \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 7796f9b..15afe0f 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,15 +1,26 @@ package allin -import allin.plugins.* +import allin.routing.BasicRouting +import allin.routing.UserRouter +import io.ktor.http.* +import io.ktor.serialization.kotlinx.json.* import io.ktor.server.application.* import io.ktor.server.engine.* import io.ktor.server.netty.* +import io.ktor.server.plugins.contentnegotiation.* +import io.ktor.server.response.* +import io.ktor.server.routing.* fun main() { - embeddedServer(Netty, port = 8080, host = "0.0.0.0", module = Application::module) - .start(wait = true) + embeddedServer(Netty,port=8080,host="0.0.0.0"){ + extracted() + }.start(wait = true) } -fun Application.module() { - configureRouting() +private fun Application.extracted() { + install(ContentNegotiation) { + json() + } + BasicRouting() + UserRouter() } diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt new file mode 100644 index 0000000..d8f0996 --- /dev/null +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -0,0 +1,11 @@ +package allin.entities + +import org.ktorm.schema.Table +import org.ktorm.schema.int +import org.ktorm.schema.varchar + +object UserEntity : Table("user") { + val id = int("id").primaryKey() + val username = varchar("username") + val password = varchar("password") +} \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/model/User.kt b/Sources/src/main/kotlin/allin/model/User.kt new file mode 100644 index 0000000..4921f91 --- /dev/null +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -0,0 +1,6 @@ +package allin.model + +import kotlinx.serialization.Serializable + +@Serializable +data class User(val username: String, val email: String, val password: String, var nbCoins: Int) diff --git a/Sources/src/main/kotlin/allin/plugins/Routing.kt b/Sources/src/main/kotlin/allin/plugins/Routing.kt index bc358d8..73bdd9e 100644 --- a/Sources/src/main/kotlin/allin/plugins/Routing.kt +++ b/Sources/src/main/kotlin/allin/plugins/Routing.kt @@ -1,13 +1,71 @@ -package allin.plugins +/*package allin.plugins +import allin.model.User +import io.ktor.http.* import io.ktor.server.application.* +import io.ktor.server.html.* +import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* +import kotlinx.html.body +import kotlinx.html.h1 +val users = mutableListOf() fun Application.configureRouting() { routing { get("/") { - call.respondText("Hello World!") + call.respondHtml(HttpStatusCode.OK) { + body { + h1 { + +"Bienvenue dans l'API de l'application ALLin!" + } + } + } + } + + route("/users") { + get { + call.respondText(users.joinToString("\n"), ContentType.Text.Plain) + } + post { + val newUser = call.receive() + users.add(newUser) + call.respond(HttpStatusCode.Created, newUser) + } + } + + route("/users/{username}") { + get { + val username = call.parameters["username"] + val user = users.find { it.username == username } + if (user != null) { + call.respond(user) + } else { + call.respond(HttpStatusCode.NotFound) + } + } + put { + val username = call.parameters["username"] + val userIndex = users.indexOfFirst { it.username == username } + if (userIndex != -1) { + val updatedUser = call.receive() + users[userIndex] = updatedUser + call.respond(updatedUser) + } else { + call.respond(HttpStatusCode.NotFound) + } + } + delete { + val username = call.parameters["username"] + val user = users.find { it.username == username } + if (user != null) { + users.remove(user) + call.respond(HttpStatusCode.NoContent) + } else { + call.respond(HttpStatusCode.NotFound) + } + } } } } +*/ \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/routing/BasicRouting.kt b/Sources/src/main/kotlin/allin/routing/BasicRouting.kt new file mode 100644 index 0000000..0d78278 --- /dev/null +++ b/Sources/src/main/kotlin/allin/routing/BasicRouting.kt @@ -0,0 +1,13 @@ +package allin.routing + +import io.ktor.server.application.* +import io.ktor.server.response.* +import io.ktor.server.routing.* + +fun Application.BasicRouting(){ + routing { + get("/") { + call.respond("Bienvenue sur l'API de AlLin!") + } + } +} \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt new file mode 100644 index 0000000..6df81fd --- /dev/null +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -0,0 +1,57 @@ +package allin.routing + +import allin.model.User +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.request.* +import io.ktor.server.response.* +import io.ktor.server.routing.* + +val users = mutableListOf(User("user1", "user1@example.com", "mdp",1000)) +fun Application.UserRouter() { + routing { + route("/users") { + get { + call.respond(users) + } + post { + val newUser = call.receive() + users.add(newUser) + call.respond(HttpStatusCode.Created, newUser) + } + } + + route("/users/{username}") { + get { + val username = call.parameters["username"] + val user = users.find { it.username == username } + if (user != null) { + call.respond(user) + } else { + call.respond(HttpStatusCode.NotFound) + } + } + put { + val username = call.parameters["username"] + val userIndex = users.indexOfFirst { it.username == username } + if (userIndex != -1) { + val updatedUser = call.receive() + users[userIndex] = updatedUser + call.respond(updatedUser) + } else { + call.respond(HttpStatusCode.NotFound) + } + } + delete { + val username = call.parameters["username"] + val user = users.find { it.username == username } + if (user != null) { + users.remove(user) + call.respond(HttpStatusCode.NoContent) + } else { + call.respond(HttpStatusCode.NotFound) + } + } + } + } +} diff --git a/Sources/target/classes/META-INF/allin-api.kotlin_module b/Sources/target/classes/META-INF/allin-api.kotlin_module index 12d8f45..f63b2d7 100644 Binary files a/Sources/target/classes/META-INF/allin-api.kotlin_module and b/Sources/target/classes/META-INF/allin-api.kotlin_module differ diff --git a/Sources/target/classes/allin/ApplicationKt$main$1.class b/Sources/target/classes/allin/ApplicationKt$main$1.class index d41d667..194b2ca 100644 Binary files a/Sources/target/classes/allin/ApplicationKt$main$1.class and b/Sources/target/classes/allin/ApplicationKt$main$1.class differ diff --git a/Sources/target/classes/allin/ApplicationKt.class b/Sources/target/classes/allin/ApplicationKt.class index 739d2f9..59b9014 100644 Binary files a/Sources/target/classes/allin/ApplicationKt.class and b/Sources/target/classes/allin/ApplicationKt.class differ diff --git a/Sources/target/classes/allin/plugins/RoutingKt$configureRouting$1$1.class b/Sources/target/classes/allin/plugins/RoutingKt$configureRouting$1$1.class deleted file mode 100644 index 8d71764..0000000 Binary files a/Sources/target/classes/allin/plugins/RoutingKt$configureRouting$1$1.class and /dev/null differ diff --git a/Sources/target/classes/allin/plugins/RoutingKt$configureRouting$1.class b/Sources/target/classes/allin/plugins/RoutingKt$configureRouting$1.class deleted file mode 100644 index 4462df9..0000000 Binary files a/Sources/target/classes/allin/plugins/RoutingKt$configureRouting$1.class and /dev/null differ diff --git a/Sources/target/classes/allin/plugins/RoutingKt.class b/Sources/target/classes/allin/plugins/RoutingKt.class deleted file mode 100644 index 5809412..0000000 Binary files a/Sources/target/classes/allin/plugins/RoutingKt.class and /dev/null differ