add User routes and serialization
continuous-integration/drone/push Build is passing Details

pull/4/head
Lucas Evard 2 years ago
parent 6cd21f30e8
commit f8b4a1cb01

@ -8,6 +8,8 @@
<name>allin-api</name>
<description>allin-api</description>
<properties>
<kotlin.version>1.8.10</kotlin.version>
<serialization.version>1.5.0</serialization.version>
<ktor_version>2.3.4</ktor_version>
<kotlin.code.style>official</kotlin.code.style>
<kotlin_version>1.9.10</kotlin_version>
@ -51,6 +53,36 @@
<version>${ktor_version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ktor</groupId>
<artifactId>ktor-server-core</artifactId>
<version>${ktor_version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
</dependency>
<dependency>
<groupId>io.ktor</groupId>
<artifactId>ktor-server-content-negotiation-jvm</artifactId>
<version>${ktor_version}</version>
</dependency>
<dependency>
<groupId>io.ktor</groupId>
<artifactId>ktor-server-html-builder-jvm</artifactId>
<version>${ktor_version}</version>
</dependency>
<dependency>
<groupId>io.ktor</groupId>
<artifactId>ktor-serialization-kotlinx-json-jvm</artifactId>
<version>${ktor_version}</version>
</dependency>
<dependency>
<groupId>io.ktor</groupId>
<artifactId>ktor-client-content-negotiation-jvm</artifactId>
<version>${ktor_version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
@ -63,6 +95,16 @@
<version>1.6.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-serialization-core-jvm</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>io.ktor</groupId>
<artifactId>ktor-server-content-negotiation-jvm</artifactId>
<version>${ktor_version}</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
@ -72,7 +114,6 @@
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
@ -138,6 +179,32 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<compilerPlugins>
<plugin>kotlinx-serialization</plugin>
</compilerPlugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-serialization</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

@ -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()
}

@ -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<Nothing>("user") {
val id = int("id").primaryKey()
val username = varchar("username")
val password = varchar("password")
}

@ -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)

@ -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<User>()
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<User>()
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<User>()
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)
}
}
}
}
}
*/

@ -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!")
}
}
}

@ -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<User>()
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<User>()
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)
}
}
}
}
}
Loading…
Cancel
Save