update ktlint rules

This commit is contained in:
2025-03-14 03:23:16 +01:00
parent 492981bed0
commit b4234a9b37
97 changed files with 2392 additions and 2359 deletions

View File

@@ -4,3 +4,5 @@ ktlint_standard = enabled
ktlint_experimental = enabled ktlint_experimental = enabled
ktlint_standard_string-template-indent = enabled ktlint_standard_string-template-indent = enabled
ktlint_standard_multiline-expression-wrapping = enabled ktlint_standard_multiline-expression-wrapping = enabled
ktlint_function_signature_body_expression_wrapping = always
indent_size = 2

View File

@@ -1,6 +1,5 @@
@file:Suppress("PropertyName") @file:Suppress("PropertyName")
@Suppress("ktlint:standard:property-naming")
val ktor_version: String by project val ktor_version: String by project
val kotlin_version: String by project val kotlin_version: String by project
val kotlin_serialization_version: String by project val kotlin_serialization_version: String by project
@@ -28,7 +27,6 @@ application {
configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> { configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
version.set("1.5.0") version.set("1.5.0")
enableExperimentalRules.set(true)
} }
repositories { repositories {

View File

@@ -27,7 +27,8 @@ class GameCommandHandler(
player: Player, player: Player,
incomingCommandChannel: ReceiveChannel<GameCommand>, incomingCommandChannel: ReceiveChannel<GameCommand>,
outgoingErrorChannelNotification: SendChannel<Notification>, outgoingErrorChannelNotification: SendChannel<Notification>,
) = commandStreamChannel(incomingCommandChannel) ) =
commandStreamChannel(incomingCommandChannel)
.process { command -> .process { command ->
if (command.payload.player.id != player.id) { if (command.payload.player.id != player.id) {
logger.atWarn { logger.atWarn {

View File

@@ -11,7 +11,8 @@ data class Deck(
constructor(players: Set<Player>) : constructor(players: Set<Player>) :
this(playersHands = PlayersHands(players)) this(playersHands = PlayersHands(players))
fun shuffle(): Deck = copy(stack = stack.shuffle()) fun shuffle(): Deck =
copy(stack = stack.shuffle())
fun placeFirstCardOnDiscard(): Deck { fun placeFirstCardOnDiscard(): Deck {
val takenCard = stack.first() val takenCard = stack.first()
@@ -58,7 +59,8 @@ data class Deck(
return Pair(copy(stack = newStack), takenCards) 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 { companion object {
fun newWithoutPlayers(): Deck = fun newWithoutPlayers(): Deck =
@@ -96,27 +98,36 @@ fun Deck.initHands(
value class Stack( value class Stack(
private val cards: Set<Card> = emptySet(), private val cards: Set<Card> = emptySet(),
) : Set<Card> by cards { ) : 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 @JvmInline
@Serializable @Serializable
value class Discard( value class Discard(
private val cards: Set<Card> = emptySet(), private val cards: Set<Card> = emptySet(),
) : Set<Card> by cards { ) : 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)

View File

@@ -13,5 +13,6 @@ import java.util.UUID
value class GameId( value class GameId(
override val id: UUID = UUID.randomUUID(), override val id: UUID = UUID.randomUUID(),
) : AggregateId { ) : AggregateId {
override fun toString(): String = id.toString() override fun toString(): String =
id.toString()
} }

View File

@@ -23,6 +23,7 @@ data class Player(
@Serializable(with = UUIDSerializer::class) @Serializable(with = UUIDSerializer::class)
override val id: UUID = UUID.randomUUID(), override val id: UUID = UUID.randomUUID(),
) : AggregateId { ) : AggregateId {
override fun toString(): String = id.toString() override fun toString(): String =
id.toString()
} }
} }

View File

@@ -10,7 +10,8 @@ value class PlayersHands(
constructor(players: Set<Player>) : constructor(players: Set<Player>) :
this(players.map { it.id }.associateWith { emptyList<Card>() }.toPlayersHands()) 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( fun removeCard(
player: Player, player: Player,
@@ -28,7 +29,8 @@ value class PlayersHands(
fun addCard( fun addCard(
player: Player, player: Player,
newCard: Card, newCard: Card,
): PlayersHands = addCards(player, listOf(newCard)) ): PlayersHands =
addCards(player, listOf(newCard))
fun addCards( fun addCards(
player: Player, player: Player,
@@ -44,4 +46,5 @@ value class PlayersHands(
}.toPlayersHands() }.toPlayersHands()
} }
fun Map<Player.PlayerId, List<Card>>.toPlayersHands(): PlayersHands = PlayersHands(this) fun Map<Player.PlayerId, List<Card>>.toPlayersHands(): PlayersHands =
PlayersHands(this)

View File

@@ -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 { private val sidePlayerIndexClockwise: Int by lazy {
if (players.isEmpty()) { if (players.isEmpty()) {

View File

@@ -29,7 +29,8 @@ class GameStateRepository(
* *
* It fetches it from the local cache if possible, otherwise it builds it. * 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]. * 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. * 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)
} }

View File

@@ -164,7 +164,8 @@ class ProjectionSnapshotRepositoryInMemory<E : Event<ID>, P : Projection<ID>, ID
private fun getEventAfterTheSnapshot( private fun getEventAfterTheSnapshot(
aggregateId: ID, aggregateId: ID,
snapshot: P?, snapshot: P?,
) = eventStore ) =
eventStore
.getStream(aggregateId) .getStream(aggregateId)
.readGreaterOfVersion(snapshot?.lastEventVersion ?: 0) .readGreaterOfVersion(snapshot?.lastEventVersion ?: 0)

View File

@@ -37,7 +37,8 @@ fun defaultJsonSerializer(): Json =
} }
object CommandIdSerializer : KSerializer<CommandId> { 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( override fun serialize(
encoder: Encoder, encoder: Encoder,
@@ -50,7 +51,8 @@ object CommandIdSerializer : KSerializer<CommandId> {
} }
object PlayerIdSerializer : KSerializer<Player.PlayerId> { 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( override fun serialize(
encoder: Encoder, encoder: Encoder,
@@ -63,7 +65,8 @@ object PlayerIdSerializer : KSerializer<Player.PlayerId> {
} }
object GameIdSerializer : KSerializer<GameId> { 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( override fun serialize(
encoder: Encoder, encoder: Encoder,
@@ -76,7 +79,8 @@ object GameIdSerializer : KSerializer<GameId> {
} }
object UUIDSerializer : KSerializer<UUID> { 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( override fun serialize(
encoder: Encoder, encoder: Encoder,

View File

@@ -14,7 +14,8 @@ value class CommandId(
) { ) {
constructor(id: String) : this(UUID.fromString(id)) constructor(id: String) : this(UUID.fromString(id))
override fun toString(): String = id.toString() override fun toString(): String =
id.toString()
} }
/** /**

View File

@@ -11,7 +11,8 @@ import kotlin.time.Duration.Companion.minutes
class CommandStreamChannelBuilder<C : Command>( class CommandStreamChannelBuilder<C : Command>(
private val maxCacheTime: Duration = 10.minutes, 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)
} }
/** /**

View File

@@ -6,7 +6,9 @@ import java.util.concurrent.ConcurrentMap
class EventStoreInMemory<E : Event<ID>, ID : AggregateId> : EventStore<E, ID> { class EventStoreInMemory<E : Event<ID>, ID : AggregateId> : EventStore<E, ID> {
private val streams: ConcurrentMap<ID, EventStream<E>> = ConcurrentHashMap() 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)
} }

View File

@@ -27,7 +27,8 @@ class EventStreamInMemory<E : Event<*>> : EventStream<E> {
events.forEach { publish(it) } 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> = override fun readGreaterOfVersion(version: Int): Set<E> =
events events

View File

@@ -13,7 +13,8 @@ class VersionBuilderLocal : VersionBuilder {
.addAndGet(1) .addAndGet(1)
.also { logger.debug { "New version $it" } } .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) = private fun versionOfAggregate(aggregateId: AggregateId) =
versions versions

View File

@@ -3,8 +3,10 @@ package eventDemo
import eventDemo.app.entity.Card import eventDemo.app.entity.Card
import eventDemo.app.entity.Deck 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))) // suspend fun SendChannel<Frame>.send(command: GameCommand) = send(Frame.Text(Json.encodeToString(command)))