diff -r c27eee1259bd -r ed2e7aef2a3e src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java --- a/src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java Fri Oct 09 19:06:51 2020 +0200 +++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java Fri Oct 09 19:07:05 2020 +0200 @@ -47,6 +47,7 @@ private final PreparedStatement affectedVersions, resolvedVersions; private final PreparedStatement clearAffected, clearResolved; private final PreparedStatement insertAffected, insertResolved; + private final PreparedStatement insertComment, updateComment, listComments; public PGIssueDao(Connection connection) throws SQLException { list = connection.prepareStatement( @@ -107,9 +108,19 @@ ); clearResolved = connection.prepareStatement("delete from lpit_issue_resolved_version where issueid = ?"); insertResolved = connection.prepareStatement("insert into lpit_issue_resolved_version (issueid, versionid) values (?,?)"); + + insertComment = connection.prepareStatement( + "insert into lpit_issue_comment (issueid, comment, userid) values (?, ? ,?)" + ); + updateComment = connection.prepareStatement( + "update lpit_issue_comment set comment = ?, updated = now(), updatecount = updatecount+1 where commentid = ?" + ); + listComments = connection.prepareStatement( + "select * from lpit_issue_comment left join lpit_user using (userid) where issueid = ? order by created" + ); } - private User obtainAssignee(ResultSet result) throws SQLException { + private User obtainUser(ResultSet result) throws SQLException { final int id = result.getInt("userid"); if (id != 0) { final var user = new User(id); @@ -132,7 +143,7 @@ issue.setCategory(IssueCategory.valueOf(result.getString("category"))); issue.setSubject(result.getString("subject")); issue.setDescription(result.getString("description")); - issue.setAssignee(obtainAssignee(result)); + issue.setAssignee(obtainUser(result)); issue.setCreated(result.getTimestamp("created")); issue.setUpdated(result.getTimestamp("updated")); issue.setEta(result.getDate("eta")); @@ -252,4 +263,38 @@ issue.setAffectedVersions(listVersions(affectedVersions, issue)); issue.setResolvedVersions(listVersions(resolvedVersions, issue)); } + + @Override + public List listComments(Issue issue) throws SQLException { + listComments.setInt(1, issue.getId()); + List comments = new ArrayList<>(); + try (var result = listComments.executeQuery()) { + while (result.next()) { + final var comment = new IssueComment(result.getInt("commentid"), issue); + comment.setCreated(result.getTimestamp("created")); + comment.setUpdated(result.getTimestamp("updated")); + comment.setUpdateCount(result.getInt("updatecount")); + comment.setComment(result.getString("comment")); + comment.setAuthor(obtainUser(result)); + comments.add(comment); + } + } + return comments; + } + + @Override + public void saveComment(IssueComment comment) throws SQLException { + Objects.requireNonNull(comment.getComment()); + Objects.requireNonNull(comment.getIssue()); + if (comment.getId() >= 0) { + updateComment.setString(1, comment.getComment()); + updateComment.setInt(2, comment.getId()); + updateComment.execute(); + } else { + insertComment.setInt(1, comment.getIssue().getId()); + insertComment.setString(2, comment.getComment()); + setForeignKeyOrNull(insertComment, 3, comment.getAuthor(), User::getId); + insertComment.execute(); + } + } }