diff --git a/Sources/pom.xml b/Sources/pom.xml
index a9e4877..9536a23 100644
--- a/Sources/pom.xml
+++ b/Sources/pom.xml
@@ -149,6 +149,12 @@
swagger-codegen-generators
1.0.38
+
+
+ org.hamcrest
+ hamcrest-core
+ 1.3
+
${project.basedir}/src/main/kotlin
@@ -164,7 +170,7 @@
org.jetbrains.kotlin
${kotlin.version}
- 1.8
+ 11
diff --git a/Sources/src/main/kotlin/allin/model/ApiMessage.kt b/Sources/src/main/kotlin/allin/model/ApiMessage.kt
index eaaf6ca..a09c1e1 100644
--- a/Sources/src/main/kotlin/allin/model/ApiMessage.kt
+++ b/Sources/src/main/kotlin/allin/model/ApiMessage.kt
@@ -12,4 +12,5 @@ object ApiMessage {
const val PARTICIPATION_NOT_FOUND = "Participation not found."
const val NOT_ENOUGH_COINS = "Not enough coins."
const val NO_GIFT = "Can't get daily gift."
+ const val USER_CANT_BE_DELETE = "This user can't be delete now !"
}
\ 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
index 1824916..535b8a6 100644
--- a/Sources/src/main/kotlin/allin/routing/BasicRouting.kt
+++ b/Sources/src/main/kotlin/allin/routing/BasicRouting.kt
@@ -1,6 +1,8 @@
package allin.routing
import allin.model.ApiMessage
+import io.github.smiley4.ktorswaggerui.dsl.get
+import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
@@ -8,7 +10,17 @@ import io.ktor.server.routing.*
fun Application.BasicRouting() {
routing {
- get("/") {
+ get("/", {
+ description = "Hello World of Allin API"
+ response {
+ HttpStatusCode.OK to {
+ description = "Successful Request"
+ }
+ HttpStatusCode.InternalServerError to {
+ description = "Something unexpected happened"
+ }
+ }
+ }) {
call.respond(ApiMessage.WELCOME)
}
}
diff --git a/Sources/src/main/kotlin/allin/routing/BetDetailRouter.kt b/Sources/src/main/kotlin/allin/routing/BetDetailRouter.kt
index 6654765..519b9eb 100644
--- a/Sources/src/main/kotlin/allin/routing/BetDetailRouter.kt
+++ b/Sources/src/main/kotlin/allin/routing/BetDetailRouter.kt
@@ -6,11 +6,14 @@ import allin.ext.verifyUserFromToken
import allin.model.ApiMessage
import allin.model.BetDetail
import allin.model.getBetAnswerDetail
+import io.github.smiley4.ktorswaggerui.dsl.get
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.auth.*
+import io.ktor.server.auth.jwt.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
+import java.util.*
fun Application.BetDetailRouter() {
@@ -20,7 +23,23 @@ fun Application.BetDetailRouter() {
routing {
authenticate {
- get("/betdetail/get/{id}") {
+ get("/betdetail/get/{id}", {
+ description = "Retrieves the details of a specific bet"
+ request {
+ headerParameter("JWT token of the logged user")
+ pathParameter("Id of the desired detail bet")
+ }
+ response {
+ HttpStatusCode.Accepted to {
+ description = "The bet can be returned"
+ body()
+ }
+ HttpStatusCode.NotFound to {
+ description = "Bet not found in the selected source"
+ body(ApiMessage.BET_NOT_FOUND)
+ }
+ }
+ }) {
hasToken { principal ->
verifyUserFromToken(userDataSource, principal) { user, _ ->
val id = call.parameters["id"].toString()
diff --git a/Sources/src/main/kotlin/allin/routing/BetRouter.kt b/Sources/src/main/kotlin/allin/routing/BetRouter.kt
index f0b70ed..02ac6b6 100644
--- a/Sources/src/main/kotlin/allin/routing/BetRouter.kt
+++ b/Sources/src/main/kotlin/allin/routing/BetRouter.kt
@@ -5,12 +5,17 @@ import allin.ext.hasToken
import allin.ext.verifyUserFromToken
import allin.model.*
import allin.utils.AppConfig
+import io.github.smiley4.ktorswaggerui.dsl.get
+import io.github.smiley4.ktorswaggerui.dsl.post
+import io.github.smiley4.ktorswaggerui.dsl.route
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.auth.*
+import io.ktor.server.auth.jwt.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
+import io.swagger.annotations.Api
import java.util.*
val tokenManagerBet = AppConfig.tokenManager
@@ -22,69 +27,154 @@ fun Application.BetRouter() {
val participationDataSource = this.dataSource.participationDataSource
routing {
- route("/bets/add") {
- authenticate {
- post {
- hasToken { principal ->
- val bet = call.receive()
- val id = UUID.randomUUID().toString()
- val username = tokenManagerBet.getUsernameFromToken(principal)
- betDataSource.getBetById(id)?.let {
- call.respond(HttpStatusCode.Conflict, ApiMessage.BET_ALREADY_EXIST)
- } ?: run {
- val betWithId = bet.copy(id = id, createdBy = username)
- betDataSource.addBet(betWithId)
- call.respond(HttpStatusCode.Created, betWithId)
+ authenticate {
+ post("/bets/add", {
+ description = "Allows a user to create a new bet"
+ request {
+ headerParameter("JWT token of the logged user")
+ body {
+ description = "Bet to add in the selected source"
+ }
+ }
+ response {
+ HttpStatusCode.Created to {
+ description = "the bet has been added"
+ body() {
+ description = "Bet with assigned id"
}
}
-
+ HttpStatusCode.Conflict to {
+ description = "Id already exist"
+ body(ApiMessage.BET_ALREADY_EXIST)
+ }
+ }
+ }) {
+ hasToken { principal ->
+ val bet = call.receive()
+ val id = UUID.randomUUID().toString()
+ val username = tokenManagerBet.getUsernameFromToken(principal)
+ betDataSource.getBetById(id)?.let {
+ call.respond(HttpStatusCode.Conflict, ApiMessage.BET_ALREADY_EXIST)
+ } ?: run {
+ val betWithId = bet.copy(id = id, createdBy = username)
+ betDataSource.addBet(betWithId)
+ call.respond(HttpStatusCode.Created, betWithId)
+ }
}
-
}
}
authenticate {
- get("/bets/gets") {
+ get("/bets/gets", {
+ description = "Allows you to recover all bets"
+ request {
+ headerParameter("JWT token of the logged user")
+ }
+ response {
+ HttpStatusCode.Accepted to {
+ description = "The list of bets is available"
+ body>() {
+ description = "List of all bet in the selected source"
+ }
+ }
+ }
+ }) {
hasToken { principal ->
- verifyUserFromToken(userDataSource, principal) { user, _ ->
+ verifyUserFromToken(userDataSource, principal) { _, _ ->
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets())
}
}
}
}
- route("/bets/get/{id}") {
- get {
- val id = call.parameters["id"] ?: ""
- betDataSource.getBetById(id)?.let { bet ->
- call.respond(HttpStatusCode.Accepted, bet)
- } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.BET_NOT_FOUND)
+ get("/bets/get/{id}", {
+ description = "Retrieves a specific bet"
+ request {
+ pathParameter("Id of the desired bet")
+ }
+ response {
+ HttpStatusCode.Accepted to {
+ description = "The bet is available"
+ body {
+ description = "Desired bet"
+ }
+ }
+ HttpStatusCode.NotFound to {
+ description = "Bet not found in the selected source"
+ body(ApiMessage.BET_NOT_FOUND)
+ }
}
+ }) {
+ val id = call.parameters["id"] ?: ""
+ betDataSource.getBetById(id)?.let { bet ->
+ call.respond(HttpStatusCode.Accepted, bet)
+ } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.BET_NOT_FOUND)
}
- route("/bets/delete") {
- post {
- val id = call.receive