From 97346e96f636efc4c508af4c837436feaaa2f5e6 Mon Sep 17 00:00:00 2001 From: ccornu <ccornu@takima.fr> Date: Tue, 11 Feb 2025 16:36:03 +0100 Subject: [PATCH] feat: improve routes + use env variables for DynamoDB --- .../configuration/DynamoDbConfiguration.kt | 12 ++++------ .../configuration/ExceptionConfiguration.kt | 1 - .../exceptions/AlreadyExistingException.kt | 2 +- src/main/kotlin/player/routes/PlayerRoute.kt | 24 +++++++------------ 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/main/kotlin/configuration/DynamoDbConfiguration.kt b/src/main/kotlin/configuration/DynamoDbConfiguration.kt index 2ebb6fb..0b8963a 100644 --- a/src/main/kotlin/configuration/DynamoDbConfiguration.kt +++ b/src/main/kotlin/configuration/DynamoDbConfiguration.kt @@ -1,24 +1,20 @@ package betclic.test.configuration +import io.ktor.server.config.* import org.slf4j.LoggerFactory import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient import java.net.URI -import software.amazon.awssdk.regions.Region -import software.amazon.awssdk.auth.credentials.AwsBasicCredentials -import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider class DynamoDbConfiguration { private val logger = LoggerFactory.getLogger(DynamoDbConfiguration::class.java) fun createDynamoDbClient(): DynamoDbAsyncClient { + val url = ApplicationConfig("application.yaml").property("ktor.database.dynamodbUrl").getString() return DynamoDbAsyncClient.builder() - .endpointOverride(URI("http://localhost:8000")) - .region(Region.US_EAST_1) - .credentialsProvider( - StaticCredentialsProvider.create(AwsBasicCredentials.create("dummy", "dummy")) - ) + .endpointOverride(URI(url)) .build() + } fun createDataSource(dynamoDbAsyncClient: DynamoDbAsyncClient): DynamoDbEnhancedAsyncClient { diff --git a/src/main/kotlin/configuration/ExceptionConfiguration.kt b/src/main/kotlin/configuration/ExceptionConfiguration.kt index c2a6274..6f00bf5 100644 --- a/src/main/kotlin/configuration/ExceptionConfiguration.kt +++ b/src/main/kotlin/configuration/ExceptionConfiguration.kt @@ -25,7 +25,6 @@ fun Application.configureExceptionHandling() { cause.message ?: SOMETHING_WENT_WRONG ) } - call.respondText(text = "500: $cause", status = HttpStatusCode.InternalServerError) } } } \ No newline at end of file diff --git a/src/main/kotlin/player/exceptions/AlreadyExistingException.kt b/src/main/kotlin/player/exceptions/AlreadyExistingException.kt index f08bc6f..4deded5 100644 --- a/src/main/kotlin/player/exceptions/AlreadyExistingException.kt +++ b/src/main/kotlin/player/exceptions/AlreadyExistingException.kt @@ -1,4 +1,4 @@ package betclic.test.player.exceptions class AlreadyExistingPlayerException(val pseudo: String) : - Exception("$pseudo already exists. You still can update this player points") \ No newline at end of file + RuntimeException("$pseudo already exists. You still can update this player points") \ No newline at end of file diff --git a/src/main/kotlin/player/routes/PlayerRoute.kt b/src/main/kotlin/player/routes/PlayerRoute.kt index bdb8158..fc4c201 100644 --- a/src/main/kotlin/player/routes/PlayerRoute.kt +++ b/src/main/kotlin/player/routes/PlayerRoute.kt @@ -3,7 +3,6 @@ package betclic.test.player.routes import betclic.test.player.dtos.PlayerCreationDTO import betclic.test.player.dtos.PlayerInfoDTO import betclic.test.player.dtos.PlayerUpdateDTO -import betclic.test.player.entities.Player import betclic.test.player.services.PlayerService import io.ktor.http.* import io.ktor.server.application.* @@ -12,10 +11,15 @@ import io.ktor.server.response.* import io.ktor.server.routing.* import org.koin.ktor.ext.inject +private const val PLAYERS = "/players" + fun Routing.playerRoutes() { val playerService by inject<PlayerService>() - // const - route("/players") { + route(PLAYERS) { + get { + val pseudo = call.request.queryParameters["pseudo"] ?: return@get call.respond(HttpStatusCode.BadRequest) + call.respond<PlayerInfoDTO>(HttpStatusCode.OK, playerService.getPlayerInfoByPseudo(pseudo)) + } post { val request = call.receive<PlayerCreationDTO>() call.respond(HttpStatusCode.Created, playerService.createNewPlayer(request)) @@ -26,23 +30,13 @@ fun Routing.playerRoutes() { call.respond(HttpStatusCode.OK, playerService.updatePlayer(request)) } - get("/{pseudo}") { - val pseudo = call.parameters["pseudo"] ?: return@get call.respond(HttpStatusCode.BadRequest) - call.respond<Player>(playerService.findPlayerByPseudo(pseudo)) - } - - get("/{pseudo}/info") { - val pseudo = call.parameters["pseudo"] ?: return@get call.respond(HttpStatusCode.BadRequest) - call.respond<PlayerInfoDTO>(playerService.getPlayerInfoByPseudo(pseudo)) - } - get("/ranking") { - call.respond(playerService.getPlayersRanked()) + call.respond(HttpStatusCode.OK, playerService.getPlayersRanked()) } delete { playerService.deleteAllPlayers() - call.respond(HttpStatusCode.NoContent) + call.respond(HttpStatusCode.NoContent) // code de retours partout } } -- GitLab