1.1 --- a/src/main/kotlin/de/uapcore/lightpit/RequestMapping.kt Mon Oct 30 10:06:22 2023 +0100 1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/RequestMapping.kt Mon Oct 30 14:44:36 2023 +0100 1.3 @@ -26,6 +26,7 @@ 1.4 package de.uapcore.lightpit 1.5 1.6 import de.uapcore.lightpit.dao.DataAccessObject 1.7 +import de.uapcore.lightpit.entities.HasNode 1.8 import de.uapcore.lightpit.viewmodel.NavMenu 1.9 import de.uapcore.lightpit.viewmodel.View 1.10 import jakarta.servlet.http.HttpServletRequest 1.11 @@ -38,6 +39,14 @@ 1.12 typealias MappingMethod = (HttpRequest, DataAccessObject) -> Unit 1.13 typealias PathParameters = Map<String, String> 1.14 1.15 +sealed class OptionalPathInfo<in T : HasNode>(info: T) { 1.16 + class Specific<T: HasNode>(val elem: T) : OptionalPathInfo<T>(elem) 1.17 + data object All : OptionalPathInfo<HasNode>(object : HasNode { override val node = "-"}) 1.18 + data object None : OptionalPathInfo<HasNode>(object : HasNode { override val node = "~"}) 1.19 + data object NotFound : OptionalPathInfo<HasNode>(object : HasNode { override val node = ""}) 1.20 + val node = info.node 1.21 +} 1.22 + 1.23 sealed interface ValidationResult<T> 1.24 class ValidationError<T>(val message: String): ValidationResult<T> 1.25 class ValidatedValue<T>(val result: T): ValidationResult<T> 1.26 @@ -173,6 +182,18 @@ 1.27 } 1.28 } 1.29 1.30 + 1.31 + fun <T : HasNode> lookupPathParam(paramName: String, list: List<T>): OptionalPathInfo<T> { 1.32 + return when (val node = this.pathParams[paramName]) { 1.33 + null -> OptionalPathInfo.All 1.34 + "-" -> OptionalPathInfo.All 1.35 + "~" -> OptionalPathInfo.None 1.36 + else -> list.find { it.node == node } 1.37 + ?.let { OptionalPathInfo.Specific(it) } 1.38 + ?: OptionalPathInfo.NotFound 1.39 + } 1.40 + } 1.41 + 1.42 val body: String by lazy { 1.43 request.reader.lineSequence().joinToString("\n") 1.44 }