update ktlint rules
This commit is contained in:
@@ -4,3 +4,5 @@ ktlint_standard = enabled
|
||||
ktlint_experimental = enabled
|
||||
ktlint_standard_string-template-indent = enabled
|
||||
ktlint_standard_multiline-expression-wrapping = enabled
|
||||
ktlint_function_signature_body_expression_wrapping = always
|
||||
indent_size = 2
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
@file:Suppress("PropertyName")
|
||||
|
||||
@Suppress("ktlint:standard:property-naming")
|
||||
val ktor_version: String by project
|
||||
val kotlin_version: String by project
|
||||
val kotlin_serialization_version: String by project
|
||||
@@ -28,7 +27,6 @@ application {
|
||||
|
||||
configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
|
||||
version.set("1.5.0")
|
||||
enableExperimentalRules.set(true)
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
||||
@@ -27,7 +27,8 @@ class GameCommandHandler(
|
||||
player: Player,
|
||||
incomingCommandChannel: ReceiveChannel<GameCommand>,
|
||||
outgoingErrorChannelNotification: SendChannel<Notification>,
|
||||
) = commandStreamChannel(incomingCommandChannel)
|
||||
) =
|
||||
commandStreamChannel(incomingCommandChannel)
|
||||
.process { command ->
|
||||
if (command.payload.player.id != player.id) {
|
||||
logger.atWarn {
|
||||
|
||||
@@ -11,7 +11,8 @@ data class Deck(
|
||||
constructor(players: Set<Player>) :
|
||||
this(playersHands = PlayersHands(players))
|
||||
|
||||
fun shuffle(): Deck = copy(stack = stack.shuffle())
|
||||
fun shuffle(): Deck =
|
||||
copy(stack = stack.shuffle())
|
||||
|
||||
fun placeFirstCardOnDiscard(): Deck {
|
||||
val takenCard = stack.first()
|
||||
@@ -58,7 +59,8 @@ data class Deck(
|
||||
return Pair(copy(stack = newStack), takenCards)
|
||||
}
|
||||
|
||||
private fun takeOne(): Pair<Deck, Card> = take(1).let { (deck, cards) -> Pair(deck, cards.first()) }
|
||||
private fun takeOne(): Pair<Deck, Card> =
|
||||
take(1).let { (deck, cards) -> Pair(deck, cards.first()) }
|
||||
|
||||
companion object {
|
||||
fun newWithoutPlayers(): Deck =
|
||||
@@ -96,27 +98,36 @@ fun Deck.initHands(
|
||||
value class Stack(
|
||||
private val cards: Set<Card> = emptySet(),
|
||||
) : Set<Card> by cards {
|
||||
operator fun plus(card: Card): Stack = cards.plus(card).toStack()
|
||||
operator fun plus(card: Card): Stack =
|
||||
cards.plus(card).toStack()
|
||||
|
||||
operator fun minus(card: Card): Stack = cards.minus(card).toStack()
|
||||
operator fun minus(card: Card): Stack =
|
||||
cards.minus(card).toStack()
|
||||
|
||||
fun shuffle(): Stack = shuffled().toStack()
|
||||
fun shuffle(): Stack =
|
||||
shuffled().toStack()
|
||||
}
|
||||
|
||||
fun List<Card>.toStack(): Stack = Stack(this.toSet())
|
||||
fun List<Card>.toStack(): Stack =
|
||||
Stack(this.toSet())
|
||||
|
||||
fun Set<Card>.toStack(): Stack = Stack(this)
|
||||
fun Set<Card>.toStack(): Stack =
|
||||
Stack(this)
|
||||
|
||||
@JvmInline
|
||||
@Serializable
|
||||
value class Discard(
|
||||
private val cards: Set<Card> = emptySet(),
|
||||
) : Set<Card> by cards {
|
||||
operator fun plus(card: Card): Discard = cards.plus(card).toDiscard()
|
||||
operator fun plus(card: Card): Discard =
|
||||
cards.plus(card).toDiscard()
|
||||
|
||||
operator fun minus(card: Card): Discard = cards.minus(card).toDiscard()
|
||||
operator fun minus(card: Card): Discard =
|
||||
cards.minus(card).toDiscard()
|
||||
}
|
||||
|
||||
fun List<Card>.toDiscard(): Discard = Discard(this.toSet())
|
||||
fun List<Card>.toDiscard(): Discard =
|
||||
Discard(this.toSet())
|
||||
|
||||
fun Set<Card>.toDiscard(): Discard = Discard(this)
|
||||
fun Set<Card>.toDiscard(): Discard =
|
||||
Discard(this)
|
||||
|
||||
@@ -13,5 +13,6 @@ import java.util.UUID
|
||||
value class GameId(
|
||||
override val id: UUID = UUID.randomUUID(),
|
||||
) : AggregateId {
|
||||
override fun toString(): String = id.toString()
|
||||
override fun toString(): String =
|
||||
id.toString()
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ data class Player(
|
||||
@Serializable(with = UUIDSerializer::class)
|
||||
override val id: UUID = UUID.randomUUID(),
|
||||
) : AggregateId {
|
||||
override fun toString(): String = id.toString()
|
||||
override fun toString(): String =
|
||||
id.toString()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ value class PlayersHands(
|
||||
constructor(players: Set<Player>) :
|
||||
this(players.map { it.id }.associateWith { emptyList<Card>() }.toPlayersHands())
|
||||
|
||||
fun getHand(player: Player): List<Card>? = this[player.id]
|
||||
fun getHand(player: Player): List<Card>? =
|
||||
this[player.id]
|
||||
|
||||
fun removeCard(
|
||||
player: Player,
|
||||
@@ -28,7 +29,8 @@ value class PlayersHands(
|
||||
fun addCard(
|
||||
player: Player,
|
||||
newCard: Card,
|
||||
): PlayersHands = addCards(player, listOf(newCard))
|
||||
): PlayersHands =
|
||||
addCards(player, listOf(newCard))
|
||||
|
||||
fun addCards(
|
||||
player: Player,
|
||||
@@ -44,4 +46,5 @@ value class PlayersHands(
|
||||
}.toPlayersHands()
|
||||
}
|
||||
|
||||
fun Map<Player.PlayerId, List<Card>>.toPlayersHands(): PlayersHands = PlayersHands(this)
|
||||
fun Map<Player.PlayerId, List<Card>>.toPlayersHands(): PlayersHands =
|
||||
PlayersHands(this)
|
||||
|
||||
@@ -62,7 +62,8 @@ data class GameState(
|
||||
}
|
||||
}
|
||||
|
||||
fun nextPlayer(direction: Direction): Player = players.elementAt(nextPlayerIndex(direction))
|
||||
fun nextPlayer(direction: Direction): Player =
|
||||
players.elementAt(nextPlayerIndex(direction))
|
||||
|
||||
private val sidePlayerIndexClockwise: Int by lazy {
|
||||
if (players.isEmpty()) {
|
||||
|
||||
@@ -29,7 +29,8 @@ class GameStateRepository(
|
||||
*
|
||||
* It fetches it from the local cache if possible, otherwise it builds it.
|
||||
*/
|
||||
fun getLast(gameId: GameId): GameState = projectionsSnapshot.getLast(gameId)
|
||||
fun getLast(gameId: GameId): GameState =
|
||||
projectionsSnapshot.getLast(gameId)
|
||||
|
||||
/**
|
||||
* Get the [GameState] to the specific [event][GameEvent].
|
||||
@@ -37,5 +38,6 @@ class GameStateRepository(
|
||||
*
|
||||
* It fetches it from the local cache if possible, otherwise it builds it.
|
||||
*/
|
||||
fun getUntil(event: GameEvent): GameState = projectionsSnapshot.getUntil(event)
|
||||
fun getUntil(event: GameEvent): GameState =
|
||||
projectionsSnapshot.getUntil(event)
|
||||
}
|
||||
|
||||
@@ -164,7 +164,8 @@ class ProjectionSnapshotRepositoryInMemory<E : Event<ID>, P : Projection<ID>, ID
|
||||
private fun getEventAfterTheSnapshot(
|
||||
aggregateId: ID,
|
||||
snapshot: P?,
|
||||
) = eventStore
|
||||
) =
|
||||
eventStore
|
||||
.getStream(aggregateId)
|
||||
.readGreaterOfVersion(snapshot?.lastEventVersion ?: 0)
|
||||
|
||||
|
||||
@@ -37,7 +37,8 @@ fun defaultJsonSerializer(): Json =
|
||||
}
|
||||
|
||||
object CommandIdSerializer : KSerializer<CommandId> {
|
||||
override fun deserialize(decoder: Decoder): CommandId = CommandId(decoder.decodeString())
|
||||
override fun deserialize(decoder: Decoder): CommandId =
|
||||
CommandId(decoder.decodeString())
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
@@ -50,7 +51,8 @@ object CommandIdSerializer : KSerializer<CommandId> {
|
||||
}
|
||||
|
||||
object PlayerIdSerializer : KSerializer<Player.PlayerId> {
|
||||
override fun deserialize(decoder: Decoder): Player.PlayerId = Player.PlayerId(UUID.fromString(decoder.decodeString()))
|
||||
override fun deserialize(decoder: Decoder): Player.PlayerId =
|
||||
Player.PlayerId(UUID.fromString(decoder.decodeString()))
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
@@ -63,7 +65,8 @@ object PlayerIdSerializer : KSerializer<Player.PlayerId> {
|
||||
}
|
||||
|
||||
object GameIdSerializer : KSerializer<GameId> {
|
||||
override fun deserialize(decoder: Decoder): GameId = GameId(UUID.fromString(decoder.decodeString()))
|
||||
override fun deserialize(decoder: Decoder): GameId =
|
||||
GameId(UUID.fromString(decoder.decodeString()))
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
@@ -76,7 +79,8 @@ object GameIdSerializer : KSerializer<GameId> {
|
||||
}
|
||||
|
||||
object UUIDSerializer : KSerializer<UUID> {
|
||||
override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString())
|
||||
override fun deserialize(decoder: Decoder): UUID =
|
||||
UUID.fromString(decoder.decodeString())
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
|
||||
@@ -14,7 +14,8 @@ value class CommandId(
|
||||
) {
|
||||
constructor(id: String) : this(UUID.fromString(id))
|
||||
|
||||
override fun toString(): String = id.toString()
|
||||
override fun toString(): String =
|
||||
id.toString()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,7 +11,8 @@ import kotlin.time.Duration.Companion.minutes
|
||||
class CommandStreamChannelBuilder<C : Command>(
|
||||
private val maxCacheTime: Duration = 10.minutes,
|
||||
) {
|
||||
operator fun invoke(incoming: ReceiveChannel<C>): CommandStreamChannel<C> = CommandStreamChannel(incoming, maxCacheTime)
|
||||
operator fun invoke(incoming: ReceiveChannel<C>): CommandStreamChannel<C> =
|
||||
CommandStreamChannel(incoming, maxCacheTime)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,7 +6,9 @@ import java.util.concurrent.ConcurrentMap
|
||||
class EventStoreInMemory<E : Event<ID>, ID : AggregateId> : EventStore<E, ID> {
|
||||
private val streams: ConcurrentMap<ID, EventStream<E>> = ConcurrentHashMap()
|
||||
|
||||
override fun getStream(aggregateId: ID): EventStream<E> = streams.computeIfAbsent(aggregateId) { EventStreamInMemory() }
|
||||
override fun getStream(aggregateId: ID): EventStream<E> =
|
||||
streams.computeIfAbsent(aggregateId) { EventStreamInMemory() }
|
||||
|
||||
override fun publish(event: E) = getStream(event.aggregateId).publish(event)
|
||||
override fun publish(event: E) =
|
||||
getStream(event.aggregateId).publish(event)
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@ class EventStreamInMemory<E : Event<*>> : EventStream<E> {
|
||||
events.forEach { publish(it) }
|
||||
}
|
||||
|
||||
override fun readAll(): Set<E> = events.toSet()
|
||||
override fun readAll(): Set<E> =
|
||||
events.toSet()
|
||||
|
||||
override fun readGreaterOfVersion(version: Int): Set<E> =
|
||||
events
|
||||
|
||||
@@ -13,7 +13,8 @@ class VersionBuilderLocal : VersionBuilder {
|
||||
.addAndGet(1)
|
||||
.also { logger.debug { "New version $it" } }
|
||||
|
||||
override fun getLastVersion(aggregateId: AggregateId): Int = versionOfAggregate(aggregateId).toInt()
|
||||
override fun getLastVersion(aggregateId: AggregateId): Int =
|
||||
versionOfAggregate(aggregateId).toInt()
|
||||
|
||||
private fun versionOfAggregate(aggregateId: AggregateId) =
|
||||
versions
|
||||
|
||||
@@ -3,8 +3,10 @@ package eventDemo
|
||||
import eventDemo.app.entity.Card
|
||||
import eventDemo.app.entity.Deck
|
||||
|
||||
fun Deck.allCardCount(): Int = stack.size + discard.size + playersHands.values.flatten().size
|
||||
fun Deck.allCardCount(): Int =
|
||||
stack.size + discard.size + playersHands.values.flatten().size
|
||||
|
||||
fun Deck.allCards(): Set<Card> = stack + discard + playersHands.values.flatten()
|
||||
fun Deck.allCards(): Set<Card> =
|
||||
stack + discard + playersHands.values.flatten()
|
||||
|
||||
// suspend fun SendChannel<Frame>.send(command: GameCommand) = send(Frame.Text(Json.encodeToString(command)))
|
||||
|
||||
Reference in New Issue
Block a user