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

changeset 81
1a2e7b5d48f7
parent 75
33b6843fdf8a
child 86
0a658e53177c
--- a/src/main/java/de/uapcore/lightpit/dao/postgres/PGProjectDao.java	Sun May 24 15:30:43 2020 +0200
+++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGProjectDao.java	Sat May 30 15:26:15 2020 +0200
@@ -46,6 +46,7 @@
 public final class PGProjectDao implements ProjectDao {
 
     private final PreparedStatement insert, update, list, find;
+    private final PreparedStatement issue_summary;
 
     public PGProjectDao(Connection connection) throws SQLException {
         list = connection.prepareStatement(
@@ -62,6 +63,14 @@
                         "left join lpit_user owner on lpit_project.owner = owner.userid " +
                         "where projectid = ?");
 
+        issue_summary = connection.prepareStatement(
+                "select phase, count(*) as total "+
+                        "from lpit_issue " +
+                        "join lpit_issue_phases using(status) " +
+                        "where project = ? "+
+                        "group by phase "
+        );
+
         insert = connection.prepareStatement(
                 "insert into lpit_project (name, description, repourl, owner) values (?, ?, ?, ?)"
         );
@@ -89,6 +98,26 @@
         return proj;
     }
 
+    private void mapIssueSummary(Project proj) throws SQLException {
+        issue_summary.setInt(1, proj.getId());
+        final var result = issue_summary.executeQuery();
+        while (result.next()) {
+            final var phase = result.getInt("phase");
+            final var total = result.getInt("total");
+            switch(phase) {
+                case 0:
+                    proj.setOpenIssues(total);
+                    break;
+                case 1:
+                    proj.setActiveIssues(total);
+                    break;
+                case 2:
+                    proj.setDoneIssues(total);
+                    break;
+            }
+        }
+    }
+
     @Override
     public void save(Project instance) throws SQLException {
         Objects.requireNonNull(instance.getName());
@@ -116,7 +145,9 @@
         List<Project> projects = new ArrayList<>();
         try (var result = list.executeQuery()) {
             while (result.next()) {
-                projects.add(mapColumns(result));
+                final var project = mapColumns(result);
+                mapIssueSummary(project);
+                projects.add(project);
             }
         }
         return projects;
@@ -127,7 +158,9 @@
         find.setInt(1, id);
         try (var result = find.executeQuery()) {
             if (result.next()) {
-                return mapColumns(result);
+                final var project = mapColumns(result);
+                mapIssueSummary(project);
+                return project;
             } else {
                 return null;
             }

mercurial