diff -r 27a25f32048e -r 1a2e7b5d48f7 src/main/java/de/uapcore/lightpit/dao/postgres/PGProjectDao.java --- 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 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; }