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

changeset 83
24a3596b8f98
parent 75
33b6843fdf8a
child 86
0a658e53177c
     1.1 --- a/src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java	Sat May 30 15:28:27 2020 +0200
     1.2 +++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java	Sat May 30 18:05:06 2020 +0200
     1.3 @@ -43,22 +43,27 @@
     1.4  
     1.5  public final class PGIssueDao implements IssueDao {
     1.6  
     1.7 -    private final PreparedStatement insert, update, list, find, affectedVersions, scheduledVersions, resolvedVersions;
     1.8 +    private final PreparedStatement insert, update, list, find;
     1.9 +    private final PreparedStatement affectedVersions, scheduledVersions, resolvedVersions;
    1.10 +    private final PreparedStatement clearAffected, clearScheduled, clearResolved;
    1.11 +    private final PreparedStatement insertAffected, insertScheduled, insertResolved;
    1.12  
    1.13      public PGIssueDao(Connection connection) throws SQLException {
    1.14          list = connection.prepareStatement(
    1.15 -                "select issueid, project, status, category, subject, description, " +
    1.16 +                "select issueid, project, p.name as projectname, status, category, subject, i.description, " +
    1.17                          "userid, username, givenname, lastname, mail, " +
    1.18                          "created, updated, eta " +
    1.19 -                        "from lpit_issue " +
    1.20 +                        "from lpit_issue i " +
    1.21 +                        "left join lpit_project p on project = projectid " +
    1.22                          "left join lpit_user on userid = assignee " +
    1.23                          "where project = ? ");
    1.24  
    1.25          find = connection.prepareStatement(
    1.26 -                "select issueid, project, status, category, subject, description, " +
    1.27 +                "select issueid, project, p.name as projectname, status, category, subject, i.description, " +
    1.28                          "userid, username, givenname, lastname, mail, " +
    1.29                          "created, updated, eta " +
    1.30 -                        "from lpit_issue " +
    1.31 +                        "from lpit_issue i " +
    1.32 +                        "left join lpit_project p on project = projectid " +
    1.33                          "left join lpit_user on userid = assignee " +
    1.34                          "where issueid = ? ");
    1.35  
    1.36 @@ -72,25 +77,31 @@
    1.37          );
    1.38  
    1.39          affectedVersions = connection.prepareStatement(
    1.40 -                "select v.versionid, v.name, v.status, v.ordinal " +
    1.41 -                        "from lpit_version v join lpit_issue_affected_version using (versionid) " +
    1.42 +                "select versionid, name, status, ordinal " +
    1.43 +                        "from lpit_version join lpit_issue_affected_version using (versionid) " +
    1.44                          "where issueid = ? " +
    1.45 -                        "order by v.ordinal, v.name"
    1.46 +                        "order by ordinal, name"
    1.47          );
    1.48 +        clearAffected = connection.prepareStatement("delete from lpit_issue_affected_version where issueid = ?");
    1.49 +        insertAffected = connection.prepareStatement("insert into lpit_issue_affected_version (issueid, versionid) values (?,?)");
    1.50  
    1.51          scheduledVersions = connection.prepareStatement(
    1.52 -                "select v.versionid, v.name, v.status, v.ordinal " +
    1.53 -                        "from lpit_version v join lpit_issue_scheduled_version using (versionid) " +
    1.54 +                "select versionid, name, status, ordinal " +
    1.55 +                        "from lpit_version join lpit_issue_scheduled_version using (versionid) " +
    1.56                          "where issueid = ? " +
    1.57 -                        "order by v.ordinal, v.name"
    1.58 +                        "order by ordinal, name"
    1.59          );
    1.60 +        clearScheduled = connection.prepareStatement("delete from lpit_issue_scheduled_version where issueid = ?");
    1.61 +        insertScheduled = connection.prepareStatement("insert into lpit_issue_scheduled_version (issueid, versionid) values (?,?)");
    1.62  
    1.63          resolvedVersions = connection.prepareStatement(
    1.64 -                "select v.versionid, v.name, v.status, v.ordinal " +
    1.65 +                "select versionid, name, status, ordinal " +
    1.66                          "from lpit_version v join lpit_issue_resolved_version using (versionid) " +
    1.67                          "where issueid = ? " +
    1.68 -                        "order by v.ordinal, v.name"
    1.69 +                        "order by ordinal, name"
    1.70          );
    1.71 +        clearResolved = connection.prepareStatement("delete from lpit_issue_resolved_version where issueid = ?");
    1.72 +        insertResolved = connection.prepareStatement("insert into lpit_issue_resolved_version (issueid, versionid) values (?,?)");
    1.73      }
    1.74  
    1.75      private User obtainAssignee(ResultSet result) throws SQLException {
    1.76 @@ -109,6 +120,7 @@
    1.77  
    1.78      private Issue mapColumns(ResultSet result) throws SQLException {
    1.79          final var project = new Project(result.getInt("project"));
    1.80 +        project.setName(result.getString("projectname"));
    1.81          final var issue = new Issue(result.getInt("issueid"), project);
    1.82          issue.setStatus(IssueStatus.valueOf(result.getString("status")));
    1.83          issue.setCategory(IssueCategory.valueOf(result.getString("category")));
    1.84 @@ -122,13 +134,37 @@
    1.85      }
    1.86  
    1.87      private Version mapVersion(ResultSet result, Project project) throws SQLException {
    1.88 -        final var version = new Version(result.getInt("v.versionid"), project);
    1.89 -        version.setName(result.getString("v.name"));
    1.90 -        version.setOrdinal(result.getInt("v.ordinal"));
    1.91 -        version.setStatus(VersionStatus.valueOf(result.getString("v.status")));
    1.92 +        final var version = new Version(result.getInt("versionid"), project);
    1.93 +        version.setName(result.getString("name"));
    1.94 +        version.setOrdinal(result.getInt("ordinal"));
    1.95 +        version.setStatus(VersionStatus.valueOf(result.getString("status")));
    1.96          return version;
    1.97      }
    1.98  
    1.99 +    private void updateVersionLists(Issue instance) throws SQLException {
   1.100 +        clearAffected.setInt(1, instance.getId());
   1.101 +        clearScheduled.setInt(1, instance.getId());
   1.102 +        clearResolved.setInt(1, instance.getId());
   1.103 +        insertAffected.setInt(1, instance.getId());
   1.104 +        insertScheduled.setInt(1, instance.getId());
   1.105 +        insertResolved.setInt(1, instance.getId());
   1.106 +        clearAffected.executeUpdate();
   1.107 +        clearScheduled.executeUpdate();
   1.108 +        clearResolved.executeUpdate();
   1.109 +        for (Version v : instance.getAffectedVersions()) {
   1.110 +            insertAffected.setInt(2, v.getId());
   1.111 +            insertAffected.executeUpdate();
   1.112 +        }
   1.113 +        for (Version v : instance.getScheduledVersions()) {
   1.114 +            insertScheduled.setInt(2, v.getId());
   1.115 +            insertScheduled.executeUpdate();
   1.116 +        }
   1.117 +        for (Version v : instance.getResolvedVersions()) {
   1.118 +            insertResolved.setInt(2, v.getId());
   1.119 +            insertResolved.executeUpdate();
   1.120 +        }
   1.121 +    }
   1.122 +
   1.123      @Override
   1.124      public void save(Issue instance) throws SQLException {
   1.125          Objects.requireNonNull(instance.getSubject());
   1.126 @@ -144,6 +180,7 @@
   1.127          final var rs = insert.executeQuery();
   1.128          rs.next();
   1.129          instance.setId(rs.getInt(1));
   1.130 +        updateVersionLists(instance);
   1.131      }
   1.132  
   1.133      @Override
   1.134 @@ -157,7 +194,13 @@
   1.135          setForeignKeyOrNull(update, 5, instance.getAssignee(), User::getId);
   1.136          setDateOrNull(update, 6, instance.getEta());
   1.137          update.setInt(7, instance.getId());
   1.138 -        return update.executeUpdate() > 0;
   1.139 +        boolean success = update.executeUpdate() > 0;
   1.140 +        if (success) {
   1.141 +            updateVersionLists(instance);
   1.142 +            return true;
   1.143 +        } else {
   1.144 +            return false;
   1.145 +        }
   1.146      }
   1.147  
   1.148      @Override

mercurial