All Downloads are FREE. Search and download functionalities are using the official Maven repository.

by.exonit.redmine.client.managers.ProjectManager.scala Maven / Gradle / Ivy

/*
 * Copyright 2017 Exon IT
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package by.exonit.redmine.client.managers

import by.exonit.redmine.client._
import monix.eval.Task

/**
 * Redmine project manager
 */
trait ProjectManager {
  /**
   * Creates a project
   * @param project Project to create
   * @return Created project
   */
  def createProject(project: Project.New): Task[Project]

  /**
   * Returns project list
   * @note Only projects, visible to current user are returned
   * @param params Custom request parameters (filtering, etc.)
   * @return Project list
   */
  def getProjects(params: (String, String)*): Task[PagedList[Project]]

  /**
   * Returns project details by its number
   * @param id Project number
   * @param includes Project additional data includes
   * @return Project
   */
  def getProject(id: ProjectIdLike, includes: Project.Include*): Task[Project]

  /**
   * Returns project details by its identifier
   * @param key Project identifier
   * @param includes Project additional data includes
   * @return Project
   */
  def getProjectByKey(key: String, includes: Project.Include*): Task[Project]

  /**
   * Updates a project
   * @param id Project number
   * @param update Update data
   * @return Operation Task
   */
  def updateProject(id: ProjectIdLike, update: Project.Update): Task[Unit]

  /**
   * Removes a project
   * @param id Project number
   * @return Operation Task
   */
  def deleteProject(id: ProjectIdLike): Task[Unit]

  /**
   * Returns versions, available in a project
   * @note Parent project versions are also returned
   *       See `[[by.exonit.redmine.client.Version Version]].project` for project where version is defined
   * @param project Project number
   * @param params Custom request parameters (filtering, etc.)
   * @return Version list
   */
  def getVersions(project: ProjectIdLike, params: (String, String)*): Task[PagedList[Version]]

  /**
   * Returns version details by version ID
   * @param id Version ID
   * @return Version details
   */
  def getVersion(id: VersionIdLike): Task[Version]

  /**
   * Creates version in a project
   * @param project Project number
   * @param version New version
   * @return Created version
   */
  def createVersion(project: ProjectIdLike, version: Version.New): Task[Version]

  /**
   * Updates version
   * @param id Version ID
   * @param update Update date
   * @return Operation Task
   */
  def updateVersion(id: VersionIdLike, update: Version.Update): Task[Unit]

  /**
   * Removes version
   * @param id Version ID
   * @return Operation Task
   */
  def deleteVersion(id: VersionIdLike): Task[Unit]

  /**
   * Returns project news
   * @param project Project number
   * @return News list
   */
  def getNews(project: ProjectIdLike): Task[PagedList[News]]
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy