update ktlint

This commit is contained in:
2024-02-29 01:31:03 +01:00
parent 53cc961c62
commit 03ba14d918
13 changed files with 117 additions and 102 deletions

View File

@@ -10,7 +10,9 @@ sealed interface AggregateId {
@JvmInline
@Serializable(with = GameIdSerializer::class)
value class GameId(override val id: UUID = UUID.randomUUID()) : AggregateId {
value class GameId(
override val id: UUID = UUID.randomUUID(),
) : AggregateId {
constructor(id: String) : this(UUID.fromString(id))
override fun toString(): String = id.toString()

View File

@@ -8,9 +8,7 @@ data class Game(
val id: GameId,
) {
companion object {
fun new(): Game {
return Game(GameId())
}
fun new(): Game = Game(GameId())
}
}

View File

@@ -7,7 +7,9 @@ import java.util.UUID
@JvmInline
@Serializable(with = CommandIdSerializer::class)
value class CommandId(private val id: UUID = UUID.randomUUID()) {
value class CommandId(
private val id: UUID = UUID.randomUUID(),
) {
constructor(id: String) : this(UUID.fromString(id))
override fun toString(): String = id.toString()

View File

@@ -18,11 +18,7 @@ class CommandStream {
commands.forEach { sendRequest(it) }
}
fun readNext(): Command? {
return commandBus.firstOrNull()
}
fun readNext(): Command? = commandBus.firstOrNull()
fun <U : Command> readNext(commandClass: Class<U>): U? {
return commandBus.filterIsInstance(commandClass).firstOrNull()
}
fun <U : Command> readNext(commandClass: Class<U>): U? = commandBus.filterIsInstance(commandClass).firstOrNull()
}

View File

@@ -21,11 +21,7 @@ class EventStream<ID : AggregateId> {
fun <U : Event<ID>> read(
aggregateId: ID,
eventClass: Class<U>,
): U? {
return eventBus.get(aggregateId)?.filterIsInstance(eventClass)?.firstOrNull()
}
): U? = eventBus.get(aggregateId)?.filterIsInstance(eventClass)?.firstOrNull()
}
inline fun <reified U : Event<ID>, ID : AggregateId> EventStream<ID>.read(aggregateId: ID): U? {
return this.read(aggregateId, U::class.java)
}
inline fun <reified U : Event<ID>, ID : AggregateId> EventStream<ID>.read(aggregateId: ID): U? = this.read(aggregateId, U::class.java)

View File

@@ -26,14 +26,20 @@ class Game(
) {
@Serializable
@Resource("card")
class Card(val game: Game) {
class Card(
val game: Game,
) {
@Serializable
@Resource("")
class PutCard(val card: Card)
class PutCard(
val card: Card,
)
@Serializable
@Resource("last")
class LastCard(val card: Card)
class LastCard(
val card: Card,
)
}
}
@@ -47,7 +53,8 @@ fun Routing.card() {
}
get<Game.Card.LastCard> {
eventStream.read<PlayCardEvent, GameId>(it.card.game.id)
eventStream
.read<PlayCardEvent, GameId>(it.card.game.id)
?.let { it1 -> call.respond<Card>(it1.card) }
?: call.response.status(HttpStatusCode.BadRequest)
}

View File

@@ -19,7 +19,9 @@ import org.koin.ktor.ext.inject
@Resource("/command")
class CommandRoute {
@Resource("send")
class Send(val commandRoute: CommandRoute) {
class Send(
val commandRoute: CommandRoute,
) {
@Serializable
data class Response(
val id: CommandId,
@@ -29,7 +31,9 @@ class CommandRoute {
}
@Resource("next")
class Next(val commandRoute: CommandRoute)
class Next(
val commandRoute: CommandRoute,
)
}
fun Routing.command() {

View File

@@ -20,7 +20,9 @@ fun Application.configureHTTP() {
}
}
class BadRequestException(val httpError: HttpErrorBadRequest) : Exception()
class BadRequestException(
val httpError: HttpErrorBadRequest,
) : Exception()
class HttpErrorBadRequest(
statusCode: HttpStatusCode,

View File

@@ -21,7 +21,8 @@ fun Application.configureSockets() {
masking = false
}
routing {
webSocket("/ws") { // websocketSession
webSocket("/ws") {
// websocketSession
for (frame in incoming) {
if (frame is Frame.Text) {
val text = frame.readText()

View File

@@ -22,48 +22,48 @@ import org.koin.java.KoinJavaComponent.getKoin
import org.koin.ktor.ext.inject
import kotlin.test.assertEquals
class CardTest : FunSpec({
test("/game/{id}/card") {
testApplication {
val client = httpClient()
application {
stopKoin()
module()
}
val id = GameId()
val card: Card = Card.Simple(1, Card.Color.Blue)
client.post("/game/$id/card") {
contentType(Json)
accept(Json)
setBody(card)
}.apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
class CardTest :
FunSpec({
test("/game/{id}/card") {
testApplication {
application {
stopKoin()
module()
}
val id = GameId()
val card: Card = Card.Simple(1, Card.Color.Blue)
httpClient()
.post("/game/$id/card") {
contentType(Json)
accept(Json)
setBody(card)
}.apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
val eventStream = getKoin().get<EventStream<GameId>>()
assertEquals(PlayCardEvent(id, card), eventStream.read<PlayCardEvent, GameId>(id))
val eventStream = getKoin().get<EventStream<GameId>>()
assertEquals(PlayCardEvent(id, card), eventStream.read<PlayCardEvent, GameId>(id))
}
}
}
}
test("/game/{id}/card/last") {
testApplication {
val client = httpClient()
val id = GameId()
val card: Card = Card.Simple(1, Card.Color.Blue)
application {
stopKoin()
module()
val eventStream by inject<EventStream<GameId>>()
eventStream.publish(
PlayCardEvent(GameId(), Card.Simple(2, Card.Color.Yellow)),
PlayCardEvent(id, card),
)
}
test("/game/{id}/card/last") {
testApplication {
val id = GameId()
val card: Card = Card.Simple(1, Card.Color.Blue)
application {
stopKoin()
module()
val eventStream by inject<EventStream<GameId>>()
eventStream.publish(
PlayCardEvent(GameId(), Card.Simple(2, Card.Color.Yellow)),
PlayCardEvent(id, card),
)
}
client.get("/game/$id/card/last").apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
assertEquals(card, this.call.body<Card>())
httpClient().get("/game/$id/card/last").apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
assertEquals(card, this.call.body<Card>())
}
}
}
}
})
})

View File

@@ -22,47 +22,49 @@ import org.koin.java.KoinJavaComponent.getKoin
import org.koin.ktor.ext.inject
import kotlin.test.assertEquals
class CommandTest : FunSpec({
test("/command/send") {
testApplication {
val client = httpClient()
application {
stopKoin()
module()
}
val command = PlayCardCommand(Game.new(), Card.Simple(1, Card.Color.Blue))
client.post("/command/send") {
contentType(Json)
accept(Json)
setBody(command)
}.apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
class CommandTest :
FunSpec({
test("/command/send") {
testApplication {
val client = httpClient()
application {
stopKoin()
module()
}
val command = PlayCardCommand(Game.new(), Card.Simple(1, Card.Color.Blue))
client
.post("/command/send") {
contentType(Json)
accept(Json)
setBody(command)
}.apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
val commandStream = getKoin().get<CommandStream>()
assertEquals(command, commandStream.readNext())
val commandStream = getKoin().get<CommandStream>()
assertEquals(command, commandStream.readNext())
}
}
}
}
test("/command/next") {
testApplication {
val command =
PlayCardCommand(
Game.new(),
Card.Simple(1, Card.Color.Blue),
)
application {
stopKoin()
module()
test("/command/next") {
testApplication {
val command =
PlayCardCommand(
Game.new(),
Card.Simple(1, Card.Color.Blue),
)
application {
stopKoin()
module()
val commandStream by inject<CommandStream>()
commandStream.sendRequest(command)
}
val commandStream by inject<CommandStream>()
commandStream.sendRequest(command)
}
httpClient().get("/command/next").apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
assertEquals(command, this.call.body<Command>())
httpClient().get("/command/next").apply {
assertEquals(HttpStatusCode.OK, status, message = bodyAsText())
assertEquals(command, this.call.body<Command>())
}
}
}
}
})
})

View File

@@ -9,8 +9,8 @@ import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import java.util.UUID
fun ApplicationTestBuilder.httpClient(): HttpClient {
return createClient {
fun ApplicationTestBuilder.httpClient(): HttpClient =
createClient {
install(ContentNegotiation) {
json(
Json {
@@ -22,4 +22,3 @@ fun ApplicationTestBuilder.httpClient(): HttpClient {
)
}
}
}