This commit is contained in:
2026-07-07 17:39:09 +02:00
parent 9a5f122bd2
commit bb97285906
27 changed files with 3078 additions and 3 deletions

View File

@@ -0,0 +1,17 @@
plugins {
kotlin("jvm") version "1.9.22"
id("org.springframework.boot") version "3.2.3"
id("io.spring.dependency-management") version "1.1.4"
}
group = "click.kamil"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.statemachine:spring-statemachine-core:3.2.1")
implementation("org.jetbrains.kotlin:kotlin-reflect")
}

View File

@@ -0,0 +1,37 @@
package click.kamil
import org.springframework.statemachine.config.EnableStateMachine
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer
enum class OrderState { NEW, PROCESSING, SHIPPED, COMPLETED }
enum class OrderEvent { PAY, SHIP, DELIVER }
@EnableStateMachine
class OrderStateMachine : EnumStateMachineConfigurerAdapter<OrderState, OrderEvent>() {
override fun configure(states: StateMachineStateConfigurer<OrderState, OrderEvent>) {
states
.withStates()
.initial(OrderState.NEW)
.states(setOf(OrderState.NEW, OrderState.PROCESSING, OrderState.SHIPPED, OrderState.COMPLETED))
}
override fun configure(transitions: StateMachineTransitionConfigurer<OrderState, OrderEvent>) {
transitions
.withExternal()
.source(OrderState.NEW).target(OrderState.PROCESSING)
.event(OrderEvent.PAY)
.action { println("Payment received") }
.and()
.withExternal()
.source(OrderState.PROCESSING).target(OrderState.SHIPPED)
.event(OrderEvent.SHIP)
.guard { true }
.and()
.withExternal()
.source(OrderState.SHIPPED).target(OrderState.COMPLETED)
.event(OrderEvent.DELIVER)
}
}