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> <name>allin-api</name>
<description>allin-api</description> <description>allin-api</description>
<properties> <properties>
<kotlin.version>1.8.10</kotlin.version>
<serialization.version>1.5.0</serialization.version>
<ktor_version>2.3.4</ktor_version> <ktor_version>2.3.4</ktor_version>
<kotlin.code.style>official</kotlin.code.style> <kotlin.code.style>official</kotlin.code.style>
<kotlin_version>1.9.10</kotlin_version> <kotlin_version>1.9.10</kotlin_version>
@ -51,6 +53,36 @@
<version>${ktor_version}</version> <version>${ktor_version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </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> <dependency>
<groupId>org.jetbrains.kotlin</groupId> <groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId> <artifactId>kotlin-test-junit</artifactId>
@ -63,6 +95,16 @@
<version>1.6.4</version> <version>1.6.4</version>
<scope>test</scope> <scope>test</scope>
</dependency> </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> </dependencies>
<build> <build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory> <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
@ -72,7 +114,6 @@
<directory>${project.basedir}/src/main/resources</directory> <directory>${project.basedir}/src/main/resources</directory>
</resource> </resource>
</resources> </resources>
<plugins> <plugins>
<plugin> <plugin>
<artifactId>kotlin-maven-plugin</artifactId> <artifactId>kotlin-maven-plugin</artifactId>
@ -138,6 +179,32 @@
</execution> </execution>
</executions> </executions>
</plugin> </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> </plugins>
</build> </build>
</project> </project>

@ -1,15 +1,26 @@
package allin 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.application.*
import io.ktor.server.engine.* import io.ktor.server.engine.*
import io.ktor.server.netty.* import io.ktor.server.netty.*
import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
fun main() { fun main() {
embeddedServer(Netty, port = 8080, host = "0.0.0.0", module = Application::module) embeddedServer(Netty,port=8080,host="0.0.0.0"){
.start(wait = true) extracted()
}.start(wait = true)
} }
fun Application.module() { private fun Application.extracted() {
configureRouting() 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.application.*
import io.ktor.server.html.*
import io.ktor.server.request.*
import io.ktor.server.response.* import io.ktor.server.response.*
import io.ktor.server.routing.* import io.ktor.server.routing.*
import kotlinx.html.body
import kotlinx.html.h1
val users = mutableListOf<User>()
fun Application.configureRouting() { fun Application.configureRouting() {
routing { routing {
get("/") { 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