diff -r 1574965c7dc7 -r 57cfb94ab99f src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java --- a/src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java Wed May 13 21:46:26 2020 +0200 +++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGUserDao.java Thu May 14 22:48:01 2020 +0200 @@ -28,7 +28,7 @@ */ package de.uapcore.lightpit.dao.postgres; -import de.uapcore.lightpit.dao.AbstractDao; +import de.uapcore.lightpit.dao.GenericDao; import de.uapcore.lightpit.dao.UserDao; import de.uapcore.lightpit.entities.User; @@ -36,26 +36,41 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; -public final class PGUserDao extends AbstractDao implements UserDao { +import static de.uapcore.lightpit.dao.Functions.setStringOrNull; + +public final class PGUserDao implements UserDao, GenericDao { - private final PreparedStatement insert; - private final PreparedStatement update; + public static final String[] COLUMNS = { + "id", "username", "lastname", "givenname", "mail" + }; + + private final PreparedStatement insert, update, list, find; public PGUserDao(Connection connection) throws SQLException { - super(connection.prepareStatement("select * from lpit_user where userid >= 0 order by username")); + list = connection.prepareStatement( + "select userid, username, lastname, givenname, mail " + + "from lpit_user where userid >= 0 " + + "order by username"); + find = connection.prepareStatement( + "select userid, username, lastname, givenname, mail " + + "from lpit_user where userid = ? "); insert = connection.prepareStatement("insert into lpit_user (username, lastname, givenname, mail) values (?, ?, ?, ?)"); update = connection.prepareStatement("update lpit_user set lastname = ?, givenname = ?, mail = ? where userid = ?"); } - @Override - public User mapColumns(ResultSet result, String q) throws SQLException { - final var user = new User(result.getInt(qual(q, "userid"))); - user.setUsername(result.getString(qual(q, "username"))); - user.setGivenname(result.getString(qual(q, "givenname"))); - user.setLastname(result.getString(qual(q, "lastname"))); + public User mapColumns(ResultSet result) throws SQLException { + final int id = result.getInt("userid"); + if (id == 0) return null; + final var user = new User(id); + user.setUsername(result.getString("username")); + user.setGivenname(result.getString("givenname")); + user.setLastname(result.getString("lastname")); + user.setMail(result.getString("mail")); return user; } @@ -77,4 +92,27 @@ update.setInt(4, instance.getUserID()); return update.executeUpdate() > 0; } + + @Override + public List list() throws SQLException { + List users = new ArrayList<>(); + try (var result = list.executeQuery()) { + while (result.next()) { + users.add(mapColumns(result)); + } + } + return users; + } + + @Override + public User find(int id) throws SQLException { + find.setInt(1, id); + try (var result = find.executeQuery()) { + if (result.next()) { + return mapColumns(result); + } else { + return null; + } + } + } }