diff -r c27eee1259bd -r ed2e7aef2a3e src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java --- a/src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java Fri Oct 09 19:06:51 2020 +0200 +++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java Fri Oct 09 19:07:05 2020 +0200 @@ -38,12 +38,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; import static de.uapcore.lightpit.dao.Functions.setStringOrNull; public final class PGUserDao implements UserDao { - private final PreparedStatement insert, update, list, find; + private final PreparedStatement insert, update, list, find, findByUsername; public PGUserDao(Connection connection) throws SQLException { list = connection.prepareStatement( @@ -54,6 +55,10 @@ "select userid, username, lastname, givenname, mail " + "from lpit_user where userid = ? "); + findByUsername = connection.prepareStatement( + "select userid, username, lastname, givenname, mail " + + "from lpit_user where lower(username) = lower(?) "); + insert = connection.prepareStatement("insert into lpit_user (username, lastname, givenname, mail) values (?, ?, ?, ?)"); update = connection.prepareStatement("update lpit_user set lastname = ?, givenname = ?, mail = ? where userid = ?"); } @@ -111,4 +116,16 @@ } } } + + @Override + public Optional findByUsername(String username) throws SQLException { + findByUsername.setString(1, username); + try (var result = findByUsername.executeQuery()) { + if (result.next()) { + return Optional.of(mapColumns(result)); + } else { + return Optional.empty(); + } + } + } }