From c84562afe6b76d190234797f6d2bb8b4f6cd36d4 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Tue, 11 Mar 2025 00:20:19 +0100 Subject: [PATCH] Move serializer --- src/main/kotlin/eventDemo/app/entity/Card.kt | 2 +- .../kotlin/eventDemo/app/entity/GameId.kt | 2 +- .../kotlin/eventDemo/app/entity/Player.kt | 4 +- .../app/notification/ErrorNotification.kt | 2 +- .../notification/ItsTheTurnOfNotification.kt | 2 +- .../app/notification/Notification.kt | 2 +- .../PlayerAsJoinTheGameNotification.kt | 2 +- .../PlayerAsPlayACardNotification.kt | 2 +- .../PlayerHavePassNotification.kt | 2 +- .../PlayerWasChoseTheCardColorNotification.kt | 2 +- .../PlayerWasReadyNotification.kt | 2 +- .../app/notification/PlayerWinNotification.kt | 2 +- .../TheGameWasStartedNotification.kt | 2 +- .../WelcomeToTheGameNotification.kt | 2 +- .../notification/YourNewCardNotification.kt | 2 +- .../eventDemo/app/query/ReadTheGameState.kt | 2 +- .../configuration/ConfigureSerialization.kt | 62 +++++++++++++++++- .../kotlin/eventDemo/libs/command/Command.kt | 2 +- .../kotlin/eventDemo/shared/Serializer.kt | 64 ------------------- .../eventDemo/app/query/TestHttpClient.kt | 4 +- 20 files changed, 80 insertions(+), 86 deletions(-) delete mode 100644 src/main/kotlin/eventDemo/shared/Serializer.kt diff --git a/src/main/kotlin/eventDemo/app/entity/Card.kt b/src/main/kotlin/eventDemo/app/entity/Card.kt index f51213c..03238b8 100644 --- a/src/main/kotlin/eventDemo/app/entity/Card.kt +++ b/src/main/kotlin/eventDemo/app/entity/Card.kt @@ -1,6 +1,6 @@ package eventDemo.app.entity -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/entity/GameId.kt b/src/main/kotlin/eventDemo/app/entity/GameId.kt index ff86bf5..8207825 100644 --- a/src/main/kotlin/eventDemo/app/entity/GameId.kt +++ b/src/main/kotlin/eventDemo/app/entity/GameId.kt @@ -1,7 +1,7 @@ package eventDemo.app.entity +import eventDemo.configuration.GameIdSerializer import eventDemo.libs.event.AggregateId -import eventDemo.shared.GameIdSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/entity/Player.kt b/src/main/kotlin/eventDemo/app/entity/Player.kt index 370a84e..f5f65ee 100644 --- a/src/main/kotlin/eventDemo/app/entity/Player.kt +++ b/src/main/kotlin/eventDemo/app/entity/Player.kt @@ -1,8 +1,8 @@ package eventDemo.app.entity +import eventDemo.configuration.PlayerIdSerializer +import eventDemo.configuration.UUIDSerializer import eventDemo.libs.event.AggregateId -import eventDemo.shared.PlayerIdSerializer -import eventDemo.shared.UUIDSerializer import io.ktor.server.auth.Principal import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/ErrorNotification.kt b/src/main/kotlin/eventDemo/app/notification/ErrorNotification.kt index e5642b4..28a12e0 100644 --- a/src/main/kotlin/eventDemo/app/notification/ErrorNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/ErrorNotification.kt @@ -1,6 +1,6 @@ package eventDemo.app.notification -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/ItsTheTurnOfNotification.kt b/src/main/kotlin/eventDemo/app/notification/ItsTheTurnOfNotification.kt index f3043d8..7ace0c5 100644 --- a/src/main/kotlin/eventDemo/app/notification/ItsTheTurnOfNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/ItsTheTurnOfNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/Notification.kt b/src/main/kotlin/eventDemo/app/notification/Notification.kt index df1b71c..d0172d8 100644 --- a/src/main/kotlin/eventDemo/app/notification/Notification.kt +++ b/src/main/kotlin/eventDemo/app/notification/Notification.kt @@ -1,6 +1,6 @@ package eventDemo.app.notification -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/PlayerAsJoinTheGameNotification.kt b/src/main/kotlin/eventDemo/app/notification/PlayerAsJoinTheGameNotification.kt index 61498ee..80b37ca 100644 --- a/src/main/kotlin/eventDemo/app/notification/PlayerAsJoinTheGameNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/PlayerAsJoinTheGameNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/PlayerAsPlayACardNotification.kt b/src/main/kotlin/eventDemo/app/notification/PlayerAsPlayACardNotification.kt index cf75bea..fd55e84 100644 --- a/src/main/kotlin/eventDemo/app/notification/PlayerAsPlayACardNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/PlayerAsPlayACardNotification.kt @@ -2,7 +2,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Card import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/PlayerHavePassNotification.kt b/src/main/kotlin/eventDemo/app/notification/PlayerHavePassNotification.kt index 69162dd..cfb4fe3 100644 --- a/src/main/kotlin/eventDemo/app/notification/PlayerHavePassNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/PlayerHavePassNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/PlayerWasChoseTheCardColorNotification.kt b/src/main/kotlin/eventDemo/app/notification/PlayerWasChoseTheCardColorNotification.kt index a413a73..164fe00 100644 --- a/src/main/kotlin/eventDemo/app/notification/PlayerWasChoseTheCardColorNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/PlayerWasChoseTheCardColorNotification.kt @@ -2,7 +2,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Card import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/PlayerWasReadyNotification.kt b/src/main/kotlin/eventDemo/app/notification/PlayerWasReadyNotification.kt index 8d77f99..64e220c 100644 --- a/src/main/kotlin/eventDemo/app/notification/PlayerWasReadyNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/PlayerWasReadyNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/PlayerWinNotification.kt b/src/main/kotlin/eventDemo/app/notification/PlayerWinNotification.kt index c4f2415..00e0d1a 100644 --- a/src/main/kotlin/eventDemo/app/notification/PlayerWinNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/PlayerWinNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/TheGameWasStartedNotification.kt b/src/main/kotlin/eventDemo/app/notification/TheGameWasStartedNotification.kt index cd5e1ce..c848e1c 100644 --- a/src/main/kotlin/eventDemo/app/notification/TheGameWasStartedNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/TheGameWasStartedNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Card -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/WelcomeToTheGameNotification.kt b/src/main/kotlin/eventDemo/app/notification/WelcomeToTheGameNotification.kt index a59a6b4..9c0db5f 100644 --- a/src/main/kotlin/eventDemo/app/notification/WelcomeToTheGameNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/WelcomeToTheGameNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Player -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/notification/YourNewCardNotification.kt b/src/main/kotlin/eventDemo/app/notification/YourNewCardNotification.kt index a35404d..da7765c 100644 --- a/src/main/kotlin/eventDemo/app/notification/YourNewCardNotification.kt +++ b/src/main/kotlin/eventDemo/app/notification/YourNewCardNotification.kt @@ -1,7 +1,7 @@ package eventDemo.app.notification import eventDemo.app.entity.Card -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.UUIDSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/app/query/ReadTheGameState.kt b/src/main/kotlin/eventDemo/app/query/ReadTheGameState.kt index 451f19f..06d984e 100644 --- a/src/main/kotlin/eventDemo/app/query/ReadTheGameState.kt +++ b/src/main/kotlin/eventDemo/app/query/ReadTheGameState.kt @@ -2,7 +2,7 @@ package eventDemo.app.query import eventDemo.app.entity.GameId import eventDemo.app.event.projection.GameStateRepository -import eventDemo.shared.GameIdSerializer +import eventDemo.configuration.GameIdSerializer import io.ktor.http.HttpStatusCode import io.ktor.resources.Resource import io.ktor.server.application.call diff --git a/src/main/kotlin/eventDemo/configuration/ConfigureSerialization.kt b/src/main/kotlin/eventDemo/configuration/ConfigureSerialization.kt index a9724c6..757e5f6 100644 --- a/src/main/kotlin/eventDemo/configuration/ConfigureSerialization.kt +++ b/src/main/kotlin/eventDemo/configuration/ConfigureSerialization.kt @@ -1,12 +1,18 @@ package eventDemo.configuration import eventDemo.app.entity.GameId -import eventDemo.shared.GameIdSerializer -import eventDemo.shared.UUIDSerializer +import eventDemo.app.entity.Player +import eventDemo.libs.command.CommandId import io.ktor.serialization.kotlinx.json.json import io.ktor.server.application.Application import io.ktor.server.application.install import io.ktor.server.plugins.contentnegotiation.ContentNegotiation +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.Json import kotlinx.serialization.modules.SerializersModule import java.util.UUID @@ -24,3 +30,55 @@ fun Application.configureSerialization() { ) } } + +object CommandIdSerializer : KSerializer { + override fun deserialize(decoder: Decoder): CommandId = CommandId(decoder.decodeString()) + + override fun serialize( + encoder: Encoder, + value: CommandId, + ) { + encoder.encodeString(value.toString()) + } + + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("CommandId", PrimitiveKind.STRING) +} + +object PlayerIdSerializer : KSerializer { + override fun deserialize(decoder: Decoder): Player.PlayerId = Player.PlayerId(UUID.fromString(decoder.decodeString())) + + override fun serialize( + encoder: Encoder, + value: Player.PlayerId, + ) { + encoder.encodeString(value.id.toString()) + } + + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("PlayerId", PrimitiveKind.STRING) +} + +object GameIdSerializer : KSerializer { + override fun deserialize(decoder: Decoder): GameId = GameId(UUID.fromString(decoder.decodeString())) + + override fun serialize( + encoder: Encoder, + value: GameId, + ) { + encoder.encodeString(value.id.toString()) + } + + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("GameId", PrimitiveKind.STRING) +} + +object UUIDSerializer : KSerializer { + override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString()) + + override fun serialize( + encoder: Encoder, + value: UUID, + ) { + encoder.encodeString(value.toString()) + } + + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING) +} diff --git a/src/main/kotlin/eventDemo/libs/command/Command.kt b/src/main/kotlin/eventDemo/libs/command/Command.kt index 604a3a9..be78170 100644 --- a/src/main/kotlin/eventDemo/libs/command/Command.kt +++ b/src/main/kotlin/eventDemo/libs/command/Command.kt @@ -1,6 +1,6 @@ package eventDemo.libs.command -import eventDemo.shared.CommandIdSerializer +import eventDemo.configuration.CommandIdSerializer import kotlinx.serialization.Serializable import java.util.UUID diff --git a/src/main/kotlin/eventDemo/shared/Serializer.kt b/src/main/kotlin/eventDemo/shared/Serializer.kt deleted file mode 100644 index 95e5b5a..0000000 --- a/src/main/kotlin/eventDemo/shared/Serializer.kt +++ /dev/null @@ -1,64 +0,0 @@ -package eventDemo.shared - -import eventDemo.app.entity.GameId -import eventDemo.app.entity.Player.PlayerId -import eventDemo.libs.command.CommandId -import kotlinx.serialization.KSerializer -import kotlinx.serialization.descriptors.PrimitiveKind -import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder -import java.util.UUID - -object CommandIdSerializer : KSerializer { - override fun deserialize(decoder: Decoder): CommandId = CommandId(decoder.decodeString()) - - override fun serialize( - encoder: Encoder, - value: CommandId, - ) { - encoder.encodeString(value.toString()) - } - - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("CommandId", PrimitiveKind.STRING) -} - -object PlayerIdSerializer : KSerializer { - override fun deserialize(decoder: Decoder): PlayerId = PlayerId(UUID.fromString(decoder.decodeString())) - - override fun serialize( - encoder: Encoder, - value: PlayerId, - ) { - encoder.encodeString(value.id.toString()) - } - - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("PlayerId", PrimitiveKind.STRING) -} - -object GameIdSerializer : KSerializer { - override fun deserialize(decoder: Decoder): GameId = GameId(UUID.fromString(decoder.decodeString())) - - override fun serialize( - encoder: Encoder, - value: GameId, - ) { - encoder.encodeString(value.id.toString()) - } - - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("GameId", PrimitiveKind.STRING) -} - -object UUIDSerializer : KSerializer { - override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString()) - - override fun serialize( - encoder: Encoder, - value: UUID, - ) { - encoder.encodeString(value.toString()) - } - - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING) -} diff --git a/src/test/kotlin/eventDemo/app/query/TestHttpClient.kt b/src/test/kotlin/eventDemo/app/query/TestHttpClient.kt index d2bdaab..9d85fb2 100644 --- a/src/test/kotlin/eventDemo/app/query/TestHttpClient.kt +++ b/src/test/kotlin/eventDemo/app/query/TestHttpClient.kt @@ -1,7 +1,7 @@ package eventDemo.app.query import eventDemo.app.entity.GameId -import eventDemo.shared.GameIdSerializer -import eventDemo.shared.UUIDSerializer +import eventDemo.configuration.GameIdSerializer +import eventDemo.configuration.UUIDSerializer import io.ktor.client.HttpClient import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.serialization.kotlinx.json.json