src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java

changeset 124
ed2e7aef2a3e
parent 121
428dca747d6b
child 128
947d0f6a6a83
--- 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<IssueComment> listComments(Issue issue) throws SQLException {
+        listComments.setInt(1, issue.getId());
+        List<IssueComment> 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();
+        }
+    }
 }

mercurial