diff -r bcf05cccac6f -r 703591e739f4 src/main/kotlin/de/uapcore/lightpit/RequestMapping.kt --- a/src/main/kotlin/de/uapcore/lightpit/RequestMapping.kt Mon Oct 30 10:06:22 2023 +0100 +++ b/src/main/kotlin/de/uapcore/lightpit/RequestMapping.kt Mon Oct 30 14:44:36 2023 +0100 @@ -26,6 +26,7 @@ package de.uapcore.lightpit import de.uapcore.lightpit.dao.DataAccessObject +import de.uapcore.lightpit.entities.HasNode import de.uapcore.lightpit.viewmodel.NavMenu import de.uapcore.lightpit.viewmodel.View import jakarta.servlet.http.HttpServletRequest @@ -38,6 +39,14 @@ typealias MappingMethod = (HttpRequest, DataAccessObject) -> Unit typealias PathParameters = Map +sealed class OptionalPathInfo(info: T) { + class Specific(val elem: T) : OptionalPathInfo(elem) + data object All : OptionalPathInfo(object : HasNode { override val node = "-"}) + data object None : OptionalPathInfo(object : HasNode { override val node = "~"}) + data object NotFound : OptionalPathInfo(object : HasNode { override val node = ""}) + val node = info.node +} + sealed interface ValidationResult class ValidationError(val message: String): ValidationResult class ValidatedValue(val result: T): ValidationResult @@ -173,6 +182,18 @@ } } + + fun lookupPathParam(paramName: String, list: List): OptionalPathInfo { + return when (val node = this.pathParams[paramName]) { + null -> OptionalPathInfo.All + "-" -> OptionalPathInfo.All + "~" -> OptionalPathInfo.None + else -> list.find { it.node == node } + ?.let { OptionalPathInfo.Specific(it) } + ?: OptionalPathInfo.NotFound + } + } + val body: String by lazy { request.reader.lineSequence().joinToString("\n") }