src/main/kotlin/de/uapcore/lightpit/RequestMapping.kt

changeset 292
703591e739f4
parent 284
671c1c8fbf1c
     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      }

mercurial