From 75f0e95ab8454fd6315c7a1c3ac31f9a36350a8e Mon Sep 17 00:00:00 2001
From: ccornu <ccornu@takima.fr>
Date: Tue, 11 Feb 2025 17:23:36 +0100
Subject: [PATCH] feat: change repository function names to avoid redundancy

---
 .../player/repositories/PlayerRepository.kt   |  8 ++--
 .../repositories/PlayerRepositoryImpl.kt      | 15 +++----
 .../kotlin/player/services/PlayerService.kt   |  2 +-
 .../player/services/PlayerServiceImpl.kt      | 23 ++++++----
 .../kotlin/player/PlayerIntegrationTest.kt    |  6 +--
 src/test/kotlin/player/PlayerServiceTest.kt   | 42 +++++++++----------
 6 files changed, 47 insertions(+), 49 deletions(-)

diff --git a/src/main/kotlin/player/repositories/PlayerRepository.kt b/src/main/kotlin/player/repositories/PlayerRepository.kt
index 4d19b9c..0aa713a 100644
--- a/src/main/kotlin/player/repositories/PlayerRepository.kt
+++ b/src/main/kotlin/player/repositories/PlayerRepository.kt
@@ -4,15 +4,15 @@ import betclic.test.player.entities.Player
 
 interface PlayerRepository {
 
-    suspend fun createNewPlayer(player: Player): Player
+    suspend fun create(player: Player): Player
 
-    suspend fun updatePlayer(player: Player): Player
+    suspend fun update(player: Player): Player
 
-    suspend fun findPlayerByPseudo(pseudo: String): Player?
+    suspend fun findByPseudo(pseudo: String): Player?
 
     suspend fun getRank(player: Player): Int
 
     suspend fun findAll(): List<Player>
 
-    suspend fun deleteAllPlayers()
+    suspend fun deleteAll()
 }
\ No newline at end of file
diff --git a/src/main/kotlin/player/repositories/PlayerRepositoryImpl.kt b/src/main/kotlin/player/repositories/PlayerRepositoryImpl.kt
index 4e273e4..278a263 100644
--- a/src/main/kotlin/player/repositories/PlayerRepositoryImpl.kt
+++ b/src/main/kotlin/player/repositories/PlayerRepositoryImpl.kt
@@ -5,11 +5,8 @@ import betclic.test.player.entities.PlayerEntity
 import betclic.test.player.entities.toPlayer
 import betclic.test.player.entities.toPlayerEntity
 import dev.andrewohara.dynamokt.DataClassTableSchema
-import io.ktor.server.application.*
-import kotlinx.coroutines.coroutineScope
 import kotlinx.coroutines.future.await
 import kotlinx.coroutines.reactive.asFlow
-import org.slf4j.LoggerFactory
 import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient
 import software.amazon.awssdk.enhanced.dynamodb.Expression
 import software.amazon.awssdk.enhanced.dynamodb.Key
@@ -20,20 +17,18 @@ class PlayerRepositoryImpl(dynamoDbEnhancedClient: DynamoDbEnhancedAsyncClient)
     private val tableName = PlayerEntity::class.simpleName
     private val tableSchema = DataClassTableSchema(PlayerEntity::class)
     private val table = dynamoDbEnhancedClient.table(tableName, tableSchema)
-    private val logger = LoggerFactory.getLogger(Application::class.java)
 
-    override suspend fun createNewPlayer(player: Player) = coroutineScope {
+    override suspend fun create(player: Player): Player {
         table.putItem(player.toPlayerEntity()).await()
-        logger.info("Successfully created new player $player")
-        return@coroutineScope player
+        return player
     }
 
-    override suspend fun updatePlayer(player: Player): Player {
+    override suspend fun update(player: Player): Player {
         val updatedPlayer = table.updateItem(player.toPlayerEntity()).await()
         return updatedPlayer.toPlayer()
     }
 
-    override suspend fun findPlayerByPseudo(pseudo: String): Player? {
+    override suspend fun findByPseudo(pseudo: String): Player? {
         val foundPlayer = table.getItem(
             Key.builder().partitionValue(pseudo).build()
         ).await()
@@ -61,7 +56,7 @@ class PlayerRepositoryImpl(dynamoDbEnhancedClient: DynamoDbEnhancedAsyncClient)
     }
 
 
-    override suspend fun deleteAllPlayers() {
+    override suspend fun deleteAll() {
         table.deleteTable()
         table.createTable().await()
 
diff --git a/src/main/kotlin/player/services/PlayerService.kt b/src/main/kotlin/player/services/PlayerService.kt
index cb1dc72..c457780 100644
--- a/src/main/kotlin/player/services/PlayerService.kt
+++ b/src/main/kotlin/player/services/PlayerService.kt
@@ -10,7 +10,7 @@ interface PlayerService {
 
     suspend fun updatePlayer(playerUpdateDTO: PlayerUpdateDTO): Player
 
-    suspend fun findPlayerByPseudo(pseudo: String): Player
+    suspend fun getPlayerByPseudo(pseudo: String): Player
 
     suspend fun getPlayerInfoByPseudo(pseudo: String): PlayerInfoDTO
 
diff --git a/src/main/kotlin/player/services/PlayerServiceImpl.kt b/src/main/kotlin/player/services/PlayerServiceImpl.kt
index 57eb05a..d58bc5c 100644
--- a/src/main/kotlin/player/services/PlayerServiceImpl.kt
+++ b/src/main/kotlin/player/services/PlayerServiceImpl.kt
@@ -8,29 +8,34 @@ import betclic.test.player.dtos.toPlayerInfoDTO
 import betclic.test.player.entities.Player
 import betclic.test.player.exceptions.AlreadyExistingPlayerException
 import betclic.test.player.repositories.PlayerRepository
+import io.ktor.server.application.*
 import io.ktor.server.plugins.*
+import org.slf4j.LoggerFactory
 
 class PlayerServiceImpl(private val playerRepository: PlayerRepository) : PlayerService {
+    private val logger = LoggerFactory.getLogger(Application::class.java)
 
+    //0Transactional
     override suspend fun createNewPlayer(playerCreationDTO: PlayerCreationDTO): Player {
-        if (playerRepository.findPlayerByPseudo(playerCreationDTO.pseudo) != null) {
+        logger.info("Creating new player ")
+        if (playerRepository.findByPseudo(playerCreationDTO.pseudo) != null) {
             throw AlreadyExistingPlayerException(playerCreationDTO.pseudo)
         }
-        return playerRepository.createNewPlayer(playerCreationDTO.toPlayer())
+        return playerRepository.create(playerCreationDTO.toPlayer())
     }
 
     override suspend fun updatePlayer(playerUpdateDTO: PlayerUpdateDTO): Player {
-        findPlayerByPseudo(playerUpdateDTO.pseudo)
-        return playerRepository.updatePlayer(playerUpdateDTO.toPlayer())
+        getPlayerByPseudo(playerUpdateDTO.pseudo)
+        return playerRepository.update(playerUpdateDTO.toPlayer())
     }
 
-    override suspend fun findPlayerByPseudo(pseudo: String): Player {
-        val player = playerRepository.findPlayerByPseudo(pseudo) ?: throw NotFoundException("Player $pseudo not found")
-        return player
+    override suspend fun getPlayerByPseudo(pseudo: String): Player {
+        return playerRepository.findByPseudo(pseudo) ?: throw NotFoundException("Player $pseudo not found")
     }
 
+    //transac
     override suspend fun getPlayerInfoByPseudo(pseudo: String): PlayerInfoDTO {
-        val player = findPlayerByPseudo(pseudo)
+        val player = getPlayerByPseudo(pseudo)
         val rank = playerRepository.getRank(player)
         return player.toPlayerInfoDTO(rank)
     }
@@ -54,6 +59,6 @@ class PlayerServiceImpl(private val playerRepository: PlayerRepository) : Player
     }
 
     override suspend fun deleteAllPlayers() {
-        playerRepository.deleteAllPlayers()
+        playerRepository.deleteAll()
     }
 }
\ No newline at end of file
diff --git a/src/test/kotlin/player/PlayerIntegrationTest.kt b/src/test/kotlin/player/PlayerIntegrationTest.kt
index 62a9ff8..f085e32 100644
--- a/src/test/kotlin/player/PlayerIntegrationTest.kt
+++ b/src/test/kotlin/player/PlayerIntegrationTest.kt
@@ -32,7 +32,7 @@ class PlayerIntegrationTest : BaseIntegrationTest() {
         assertEquals(HttpStatusCode.Created, response.status)
 
         val playerRepository by inject<PlayerRepository>()
-        val player = playerRepository.findPlayerByPseudo(NAME_1)
+        val player = playerRepository.findByPseudo(NAME_1)
         assertThat(player).extracting("pseudo", "pointsNumber")
             .containsExactly(NAME_1, 0)
     }
@@ -40,13 +40,13 @@ class PlayerIntegrationTest : BaseIntegrationTest() {
     @Test
     fun `When calling player update, a player should be updated in DB`() = iTest {
         val playerRepository by inject<PlayerRepository>()
-        playerRepository.createNewPlayer(Player(pseudo = NAME_2, pointsNumber = 0))
+        playerRepository.create(Player(pseudo = NAME_2, pointsNumber = 0))
         val response = client.put("/players") {
             header(HttpHeaders.ContentType, ContentType.Application.Json)
             setBody(Json.encodeToString(PlayerUpdateDTO(pseudo = NAME_2, pointsNumber = 30)))
         }
         assertEquals(HttpStatusCode.OK, response.status)
-        val player = playerRepository.findPlayerByPseudo(NAME_2)
+        val player = playerRepository.findByPseudo(NAME_2)
         assertThat(player).extracting("pseudo", "pointsNumber")
             .containsExactly(NAME_2, 30)
     }
diff --git a/src/test/kotlin/player/PlayerServiceTest.kt b/src/test/kotlin/player/PlayerServiceTest.kt
index 38de6eb..75b98b6 100644
--- a/src/test/kotlin/player/PlayerServiceTest.kt
+++ b/src/test/kotlin/player/PlayerServiceTest.kt
@@ -18,8 +18,6 @@ import org.junit.Assert.assertThrows
 import org.junit.Test
 
 class PlayerServiceTest {
-
-
     private val playerRepository: PlayerRepository = mockk()
 
     private val playerService: PlayerServiceImpl = PlayerServiceImpl(playerRepository)
@@ -31,15 +29,15 @@ class PlayerServiceTest {
 
     @Test
     fun `when creating player, should call the repository once`() {
-        coEvery { playerRepository.createNewPlayer(player1) } returns player1
-        coEvery { playerRepository.findPlayerByPseudo(john) } returns null
+        coEvery { playerRepository.create(player1) } returns player1
+        coEvery { playerRepository.findByPseudo(john) } returns null
         runBlocking { playerService.createNewPlayer(PlayerCreationDTO(pseudo = john)) }
-        coVerify(exactly = 1) { playerRepository.createNewPlayer(player1) }
+        coVerify(exactly = 1) { playerRepository.create(player1) }
     }
 
     @Test
     fun `when creating player that exists, should throw on existing player`() {
-        coEvery { playerRepository.findPlayerByPseudo(john) } returns player1
+        coEvery { playerRepository.findByPseudo(john) } returns player1
         assertThrows(AlreadyExistingPlayerException::class.java) {
             runBlocking { playerService.createNewPlayer(PlayerCreationDTO(pseudo = john)) }
         }
@@ -47,15 +45,15 @@ class PlayerServiceTest {
 
     @Test
     fun `when updating player, should call the repository once`() {
-        coEvery { playerRepository.findPlayerByPseudo(pseudo = john) } returns player1
-        coEvery { playerRepository.updatePlayer(playerToUpdate) } returns playerToUpdate
+        coEvery { playerRepository.findByPseudo(pseudo = john) } returns player1
+        coEvery { playerRepository.update(playerToUpdate) } returns playerToUpdate
         runBlocking { playerService.updatePlayer(PlayerUpdateDTO(pseudo = john, pointsNumber = 10)) }
-        coVerify(exactly = 1) { playerRepository.updatePlayer(playerToUpdate) }
+        coVerify(exactly = 1) { playerRepository.update(playerToUpdate) }
     }
 
     @Test
-    fun `when updating player that doesn't exist, should throw on not found player`() {
-        coEvery { playerRepository.findPlayerByPseudo(pseudo = john) } returns null
+    fun `when updating player that doesn't exist, should throw a not found player`() {
+        coEvery { playerRepository.findByPseudo(pseudo = john) } returns null
         assertThrows(NotFoundException::class.java) {
             runBlocking { playerService.updatePlayer(PlayerUpdateDTO(pseudo = john, pointsNumber = 10)) }
         }
@@ -63,22 +61,22 @@ class PlayerServiceTest {
 
     @Test
     fun `when finding user by pseudo, should call the repository once`() {
-        coEvery { playerRepository.findPlayerByPseudo(pseudo = john) } returns player1
-        runBlocking { playerService.findPlayerByPseudo(pseudo = john) }
-        coVerify(exactly = 1) { playerRepository.findPlayerByPseudo(john) }
+        coEvery { playerRepository.findByPseudo(pseudo = john) } returns player1
+        runBlocking { playerService.getPlayerByPseudo(pseudo = john) }
+        coVerify(exactly = 1) { playerRepository.findByPseudo(john) }
     }
 
     @Test
-    fun `when finding by pseudo, should throw on not found player`() {
-        coEvery { playerRepository.findPlayerByPseudo(pseudo = john) } returns null
+    fun `when finding by pseudo without match, should throw a not found player`() {
+        coEvery { playerRepository.findByPseudo(pseudo = john) } returns null
         assertThrows(NotFoundException::class.java) {
-            runBlocking { playerService.findPlayerByPseudo(pseudo = john) }
+            runBlocking { playerService.getPlayerByPseudo(pseudo = john) }
         }
     }
 
     @Test
     fun `when getting player info, should return player with his rank`() {
-        coEvery { playerRepository.findPlayerByPseudo(pseudo = john) } returns player1
+        coEvery { playerRepository.findByPseudo(pseudo = john) } returns player1
         coEvery { playerRepository.getRank(player1) } returns 2
         val result = runBlocking { playerService.getPlayerInfoByPseudo(pseudo = john) }
         assertThat(result.pseudo).isEqualTo(john)
@@ -86,8 +84,8 @@ class PlayerServiceTest {
     }
 
     @Test
-    fun `when getting player info on non-existing player, should throw on not found player`() {
-        coEvery { playerRepository.findPlayerByPseudo(pseudo = john) } returns null
+    fun `when getting player info on non-existing player, should throw a not found player exception`() {
+        coEvery { playerRepository.findByPseudo(pseudo = john) } returns null
         coEvery { playerRepository.getRank(player1) } returns 2
         assertThrows(NotFoundException::class.java) {
             runBlocking { playerService.getPlayerInfoByPseudo(pseudo = john) }
@@ -114,8 +112,8 @@ class PlayerServiceTest {
 
     @Test
     fun `when deleting all players, should call the repository once`() {
-        coEvery { playerRepository.deleteAllPlayers() } just runs
+        coEvery { playerRepository.deleteAll() } just runs
         runBlocking { playerService.deleteAllPlayers() }
-        coVerify(exactly = 1) { playerRepository.deleteAllPlayers() }
+        coVerify(exactly = 1) { playerRepository.deleteAll() }
     }
 }
\ No newline at end of file
-- 
GitLab