src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt

changeset 268
ca5501d851fa
parent 263
aa22103809cd
child 284
671c1c8fbf1c
     1.1 --- a/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt	Tue Jan 03 18:25:51 2023 +0100
     1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt	Sun Jan 08 17:07:26 2023 +0100
     1.3 @@ -27,6 +27,7 @@
     1.4  
     1.5  import de.uapcore.lightpit.entities.*
     1.6  import de.uapcore.lightpit.types.IssueHistoryType
     1.7 +import de.uapcore.lightpit.types.RelationType
     1.8  import de.uapcore.lightpit.types.WebColor
     1.9  import de.uapcore.lightpit.viewmodel.ComponentSummary
    1.10  import de.uapcore.lightpit.viewmodel.IssueSummary
    1.11 @@ -480,11 +481,12 @@
    1.12          select issueid,
    1.13              i.project, p.name as projectname, p.node as projectnode,
    1.14              component, c.name as componentname, c.node as componentnode,
    1.15 -            status, category, subject, i.description,
    1.16 +            status, phase, category, subject, i.description,
    1.17              userid, username, givenname, lastname, mail,
    1.18              created, updated, eta, affected, resolved
    1.19          from lpit_issue i
    1.20          join lpit_project p on i.project = projectid
    1.21 +        join lpit_issue_phases using (status)
    1.22          left join lpit_component c on component = c.id
    1.23          left join lpit_user on userid = assignee 
    1.24          """.trimIndent()
    1.25 @@ -534,15 +536,17 @@
    1.26          return i
    1.27      }
    1.28  
    1.29 -    override fun listIssues(project: Project): List<Issue> =
    1.30 -        withStatement("$issueQuery where i.project = ?") {
    1.31 +    override fun listIssues(project: Project, includeDone: Boolean): List<Issue> =
    1.32 +        withStatement("$issueQuery where i.project = ? and (? or phase < 2)") {
    1.33              setInt(1, project.id)
    1.34 +            setBoolean(2, includeDone)
    1.35              queryAll { it.extractIssue() }
    1.36          }
    1.37  
    1.38 -    override fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> =
    1.39 +    override fun listIssues(project: Project, includeDone: Boolean, version: Version?, component: Component?): List<Issue> =
    1.40          withStatement(
    1.41 -            """$issueQuery where i.project = ? and 
    1.42 +            """$issueQuery where i.project = ? and
    1.43 +                (? or phase < 2) and
    1.44                  (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and
    1.45                  (not ? or component = ?) and (not ? or component is null)
    1.46              """.trimIndent()
    1.47 @@ -559,8 +563,9 @@
    1.48                  }
    1.49              }
    1.50              setInt(1, project.id)
    1.51 -            applyFilter(version, 2, 4, 3)
    1.52 -            applyFilter(component, 5, 7, 6)
    1.53 +            setBoolean(2, includeDone)
    1.54 +            applyFilter(version, 3, 5, 4)
    1.55 +            applyFilter(component, 6, 8, 7)
    1.56  
    1.57              queryAll { it.extractIssue() }
    1.58          }
    1.59 @@ -678,6 +683,21 @@
    1.60              queryAll { IssueRelation(issue, findIssue(it.getInt("from_issue"))!!, it.getEnum("type"), true) }
    1.61          }.forEach(this::add)
    1.62      }
    1.63 +
    1.64 +    override fun getIssueRelationMap(project: Project, includeDone: Boolean): IssueRelationMap =
    1.65 +        withStatement(
    1.66 +            """
    1.67 +                select r.from_issue, r.to_issue, r.type
    1.68 +                from lpit_issue_relation r
    1.69 +                join lpit_issue i on i.issueid = r.from_issue
    1.70 +                join lpit_issue_phases p on i.status = p.status
    1.71 +                where i.project = ? and (? or p.phase < 2)
    1.72 +                """.trimIndent()
    1.73 +        ) {
    1.74 +            setInt(1, project.id)
    1.75 +            setBoolean(2, includeDone)
    1.76 +            queryAll { Pair(it.getInt("from_issue"), Pair(it.getInt("to_issue"), it.getEnum<RelationType>("type"))) }
    1.77 +        }.groupBy({it.first},{it.second})
    1.78      //</editor-fold>
    1.79  
    1.80      //<editor-fold desc="IssueComment">

mercurial