src/main/kotlin/de/uapcore/lightpit/servlet/UsersServlet.kt

changeset 209
c9c6abf167c7
parent 184
e8eecee6aadf
child 210
37fbdcb422b7
--- a/src/main/kotlin/de/uapcore/lightpit/servlet/UsersServlet.kt	Tue Aug 03 12:22:10 2021 +0200
+++ b/src/main/kotlin/de/uapcore/lightpit/servlet/UsersServlet.kt	Tue Aug 03 13:41:32 2021 +0200
@@ -25,12 +25,9 @@
 
 package de.uapcore.lightpit.servlet
 
-import de.uapcore.lightpit.AbstractServlet
-import de.uapcore.lightpit.HttpRequest
-import de.uapcore.lightpit.LoggingTrait
+import de.uapcore.lightpit.*
 import de.uapcore.lightpit.dao.DataAccessObject
 import de.uapcore.lightpit.entities.User
-import de.uapcore.lightpit.logger
 import de.uapcore.lightpit.viewmodel.UserEditView
 import de.uapcore.lightpit.viewmodel.UsersView
 import javax.servlet.annotation.WebServlet
@@ -48,21 +45,21 @@
     private val list = "users"
     private val form = "user-form"
 
-    fun index(http: HttpRequest, dao: DataAccessObject) {
+    private fun index(http: HttpRequest, dao: DataAccessObject) {
         with(http) {
             view = UsersView(dao.listUsers())
             render(list)
         }
     }
 
-    fun create(http: HttpRequest, dao: DataAccessObject) {
+    private fun create(http: HttpRequest, dao: DataAccessObject) {
         with(http) {
             view = UserEditView(User(-1))
             render(form)
         }
     }
 
-    fun edit(http: HttpRequest, dao: DataAccessObject) {
+    private fun edit(http: HttpRequest, dao: DataAccessObject) {
         val id = http.pathParams["userid"]?.toIntOrNull()
         if (id == null) {
             http.response.sendError(404)
@@ -79,7 +76,7 @@
         }
     }
 
-    fun commit(http: HttpRequest, dao: DataAccessObject) {
+    private fun commit(http: HttpRequest, dao: DataAccessObject) {
         val id = http.param("userid")?.toIntOrNull()
         if (id == null) {
             http.response.sendError(400)
@@ -88,25 +85,32 @@
 
         val user = User(id)
         with(user) {
-            username = http.param("username") ?: ""
             givenname = http.param("givenname")
             lastname = http.param("lastname")
             mail = http.param("mail")
         }
 
-        if (dao.findUserByName(user.username) != null) {
-            with(http) {
-                view = UserEditView(user).apply { errorText = "validation.username.unique" }
+        if (user.id > 0) {
+            logger().info("Update user with id ${user.id}.")
+            dao.updateUser(user)
+            http.renderCommit("users/")
+        } else {
+            val errorMessages = mutableListOf<String>()
+            val username = http.param("username", {
+                if (it == null) ValidationError("validation.username.null")
+                else if (dao.findUserByName(it) != null) ValidationError("validation.username.unique")
+                else ValidatedValue(it)
+            }, errorMessages)
+
+            if (username != null) {
+                logger().info("Insert user ${username}.")
+                user.username = username
+                dao.insertUser(user)
+                http.renderCommit("users/")
+            } else {
+                http.view = UserEditView(user).apply { this.errorMessages = errorMessages }
+                http.render(form)
             }
         }
-
-        if (user.id > 0) {
-            logger().info("Update user ${user.username} with id ${user.id}.")
-            dao.updateUser(user)
-        } else {
-            logger().info("Insert user ${user.username}.")
-            dao.insertUser(user)
-        }
-        http.renderCommit("users/")
     }
 }
\ No newline at end of file

mercurial