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