mike@159: /* universe@180: * Copyright 2021 Mike Becker. All rights reserved. mike@159: * mike@159: * Redistribution and use in source and binary forms, with or without mike@159: * modification, are permitted provided that the following conditions are met: mike@159: * mike@159: * 1. Redistributions of source code must retain the above copyright mike@159: * notice, this list of conditions and the following disclaimer. mike@159: * mike@159: * 2. Redistributions in binary form must reproduce the above copyright mike@159: * notice, this list of conditions and the following disclaimer in the mike@159: * documentation and/or other materials provided with the distribution. mike@159: * mike@159: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" mike@159: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE mike@159: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE mike@159: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE mike@159: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL mike@159: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR mike@159: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER mike@159: * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, mike@159: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE mike@159: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. mike@159: */ mike@159: mike@159: package de.uapcore.lightpit.dao mike@159: universe@167: import de.uapcore.lightpit.entities.* universe@184: import de.uapcore.lightpit.viewmodel.ComponentSummary universe@184: import de.uapcore.lightpit.viewmodel.IssueSummary universe@184: import de.uapcore.lightpit.viewmodel.VersionSummary universe@167: universe@167: interface DataAccessObject { universe@248: universe@167: fun listUsers(): List universe@167: fun findUser(id: Int): User? universe@167: fun findUserByName(username: String): User? universe@167: fun insertUser(user: User) universe@167: fun updateUser(user: User) universe@167: universe@184: /** universe@184: * Lists all versions of the specified [project]. universe@184: * universe@184: * The list is first ordered by the ordinal of the version and universe@184: * then by name, both descending. universe@184: */ universe@167: fun listVersions(project: Project): List universe@184: fun listVersionSummaries(project: Project): List universe@167: fun findVersion(id: Int): Version? universe@167: fun findVersionByNode(project: Project, node: String): Version? universe@167: fun insertVersion(version: Version) universe@167: fun updateVersion(version: Version) universe@167: universe@167: fun listComponents(project: Project): List universe@184: fun listComponentSummaries(project: Project): List universe@167: fun findComponent(id: Int): Component? universe@167: fun findComponentByNode(project: Project, node: String): Component? universe@167: fun insertComponent(component: Component) universe@167: fun updateComponent(component: Component) universe@167: universe@184: /** universe@184: * Lists all projects ordered by name. universe@184: */ universe@167: fun listProjects(): List universe@167: fun findProject(id: Int): Project? universe@167: fun findProjectByNode(node: String): Project? universe@167: fun insertProject(project: Project) universe@167: fun updateProject(project: Project) universe@167: universe@167: fun collectIssueSummary(project: Project): IssueSummary universe@257: fun collectIssueSummary(assignee: User): IssueSummary universe@167: universe@263: fun listIssues(project: Project): List universe@248: fun listIssues(project: Project, version: Version?, component: Component?): List universe@167: fun findIssue(id: Int): Issue? universe@184: fun insertIssue(issue: Issue): Int universe@167: fun updateIssue(issue: Issue) universe@167: universe@167: fun listComments(issue: Issue): List universe@207: fun findComment(id: Int): IssueComment? universe@232: fun insertComment(issueComment: IssueComment): Int universe@207: fun updateComment(issueComment: IssueComment) universe@232: universe@263: /** universe@263: * Inserts an issue relation, if it does not already exist. universe@263: */ universe@263: fun insertIssueRelation(rel: IssueRelation) universe@263: fun deleteIssueRelation(rel: IssueRelation) universe@263: fun listIssueRelations(issue: Issue): List universe@263: universe@232: fun insertHistoryEvent(issue: Issue, newId: Int = 0) universe@242: fun insertHistoryEvent(issue: Issue, issueComment: IssueComment, newId: Int = 0) universe@235: universe@239: /** universe@239: * Lists the issue history of the project with [projectId] for the past [days]. universe@239: */ universe@235: fun listIssueHistory(projectId: Int, days: Int): List universe@241: universe@241: /** universe@241: * Lists the issue comment history of the project with [projectId] for the past [days]. universe@241: */ universe@241: fun listIssueCommentHistory(projectId: Int, days: Int): List universe@232: }