Add IdempotencyPlugin for handling Idempotency-Key headers in Ktor applications

This commit is contained in:
Stefan Mogeritsch 2026-03-28 21:07:30 +01:00
parent 9ec8535ff7
commit eedce74a85

View File

@ -0,0 +1,26 @@
package at.mocode.masterdata.api.plugins
import io.ktor.server.application.*
import io.ktor.util.*
import java.time.Duration
/**
* Minimaler Ktor-Plugin-Skeleton für Idempotency-Key Verarbeitung.
* Aktuell: Stellt den Header `Idempotency-Key` als Call-Attribut bereit.
* Erweiterung (Cache/Short-Circuit) folgt im nächsten Schritt.
*/
object IdempotencyPlugin {
@JvmInline
value class Configuration(val ttl: Duration = Duration.ofMinutes(5))
val IdempotencyKeyAttr: AttributeKey<String> = AttributeKey("IdempotencyKey")
fun install(application: Application, configuration: Configuration = Configuration()) {
application.intercept(ApplicationCallPipeline.Plugins) {
val key = call.request.headers["Idempotency-Key"]?.trim()
if (!key.isNullOrBlank()) {
call.attributes.put(IdempotencyKeyAttr, key)
}
}
}
}