1.1 --- a/src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java Fri Oct 09 19:06:51 2020 +0200 1.2 +++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java Fri Oct 09 19:07:05 2020 +0200 1.3 @@ -47,6 +47,7 @@ 1.4 private final PreparedStatement affectedVersions, resolvedVersions; 1.5 private final PreparedStatement clearAffected, clearResolved; 1.6 private final PreparedStatement insertAffected, insertResolved; 1.7 + private final PreparedStatement insertComment, updateComment, listComments; 1.8 1.9 public PGIssueDao(Connection connection) throws SQLException { 1.10 list = connection.prepareStatement( 1.11 @@ -107,9 +108,19 @@ 1.12 ); 1.13 clearResolved = connection.prepareStatement("delete from lpit_issue_resolved_version where issueid = ?"); 1.14 insertResolved = connection.prepareStatement("insert into lpit_issue_resolved_version (issueid, versionid) values (?,?)"); 1.15 + 1.16 + insertComment = connection.prepareStatement( 1.17 + "insert into lpit_issue_comment (issueid, comment, userid) values (?, ? ,?)" 1.18 + ); 1.19 + updateComment = connection.prepareStatement( 1.20 + "update lpit_issue_comment set comment = ?, updated = now(), updatecount = updatecount+1 where commentid = ?" 1.21 + ); 1.22 + listComments = connection.prepareStatement( 1.23 + "select * from lpit_issue_comment left join lpit_user using (userid) where issueid = ? order by created" 1.24 + ); 1.25 } 1.26 1.27 - private User obtainAssignee(ResultSet result) throws SQLException { 1.28 + private User obtainUser(ResultSet result) throws SQLException { 1.29 final int id = result.getInt("userid"); 1.30 if (id != 0) { 1.31 final var user = new User(id); 1.32 @@ -132,7 +143,7 @@ 1.33 issue.setCategory(IssueCategory.valueOf(result.getString("category"))); 1.34 issue.setSubject(result.getString("subject")); 1.35 issue.setDescription(result.getString("description")); 1.36 - issue.setAssignee(obtainAssignee(result)); 1.37 + issue.setAssignee(obtainUser(result)); 1.38 issue.setCreated(result.getTimestamp("created")); 1.39 issue.setUpdated(result.getTimestamp("updated")); 1.40 issue.setEta(result.getDate("eta")); 1.41 @@ -252,4 +263,38 @@ 1.42 issue.setAffectedVersions(listVersions(affectedVersions, issue)); 1.43 issue.setResolvedVersions(listVersions(resolvedVersions, issue)); 1.44 } 1.45 + 1.46 + @Override 1.47 + public List<IssueComment> listComments(Issue issue) throws SQLException { 1.48 + listComments.setInt(1, issue.getId()); 1.49 + List<IssueComment> comments = new ArrayList<>(); 1.50 + try (var result = listComments.executeQuery()) { 1.51 + while (result.next()) { 1.52 + final var comment = new IssueComment(result.getInt("commentid"), issue); 1.53 + comment.setCreated(result.getTimestamp("created")); 1.54 + comment.setUpdated(result.getTimestamp("updated")); 1.55 + comment.setUpdateCount(result.getInt("updatecount")); 1.56 + comment.setComment(result.getString("comment")); 1.57 + comment.setAuthor(obtainUser(result)); 1.58 + comments.add(comment); 1.59 + } 1.60 + } 1.61 + return comments; 1.62 + } 1.63 + 1.64 + @Override 1.65 + public void saveComment(IssueComment comment) throws SQLException { 1.66 + Objects.requireNonNull(comment.getComment()); 1.67 + Objects.requireNonNull(comment.getIssue()); 1.68 + if (comment.getId() >= 0) { 1.69 + updateComment.setString(1, comment.getComment()); 1.70 + updateComment.setInt(2, comment.getId()); 1.71 + updateComment.execute(); 1.72 + } else { 1.73 + insertComment.setInt(1, comment.getIssue().getId()); 1.74 + insertComment.setString(2, comment.getComment()); 1.75 + setForeignKeyOrNull(insertComment, 3, comment.getAuthor(), User::getId); 1.76 + insertComment.execute(); 1.77 + } 1.78 + } 1.79 }