openapi: 3.0.1
info:
  title: Tasks Rest Api
  description: Tasks addon rest endpoints
  license:
    name: LGPL
    url: https://www.gnu.org/licenses/lgpl-3.0.en.html
  version: "1.0"
tags:
- name: /projects
  description: Managing tasks
- name: /status
  description: Managing status
- name: /tasks
  description: Managing tasks
paths:
  /projects/changeProjectColor/{projectId}:
    put:
      tags:
      - /projects
      summary: Change Project Color
      description: This change Project Color
      operationId: changeProjectColor
      parameters:
      - name: projectId
        in: path
        description: projectId
        required: true
        schema:
          type: integer
          format: int64
      - name: color
        in: query
        description: color
        schema:
          type: string
          default: "null"
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /projects/cloneproject:
    post:
      tags:
      - /projects
      summary: Clone a project
      description: This Clone project
      operationId: cloneProject
      requestBody:
        description: Project object to clone
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/ProjectDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /projects/createproject:
    post:
      tags:
      - /projects
      summary: Adds a project
      description: This Adds project
      operationId: createProject
      requestBody:
        description: Project object to create
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/ProjectDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /projects/project/statistics/{id}:
    get:
      tags:
      - /projects
      summary: Gets users by query and project name
      description: This returns users by query and project name
      operationId: getProjectsStatistics
      parameters:
      - name: id
        in: path
        description: id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
  /projects/projectParticipants/{idProject}/{term}:
    get:
      tags:
      - /projects
      summary: Gets participants
      description: This returns participants in project
      operationId: getProjectParticipants
      parameters:
      - name: idProject
        in: path
        description: Project id
        required: true
        schema:
          type: integer
          format: int64
      - name: term
        in: path
        description: User name search information
        required: true
        schema:
          type: string
      - name: includeCurrentUser
        in: query
        description: Include or not current user
        schema:
          type: boolean
      responses:
        "200":
          description: Request fulfilled
  /projects/projects:
    get:
      tags:
      - /projects
      summary: Gets projects
      description: This returns projects of the authenticated user
      operationId: getProjects
      parameters:
      - name: q
        in: query
        description: Search term
        schema:
          type: string
          default: "null"
      - name: spaceName
        in: query
        description: Space Name
        schema:
          type: string
          default: "null"
      - name: projectsFilter
        in: query
        description: Filter
        schema:
          type: string
      - name: offset
        in: query
        description: Offset
        schema:
          type: integer
          format: int32
          default: 0
      - name: limit
        in: query
        description: Limit
        schema:
          type: integer
          format: int32
          default: -1
      - name: participatorParam
        in: query
        description: Participator Need
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Request fulfilled
        "500":
          description: Internal server error
  /projects/projects/status/{id}:
    get:
      tags:
      - /projects
      summary: Gets the default status by project id
      description: This returns the default status by project id
      operationId: getDefaultStatusByProjectId
      parameters:
      - name: id
        in: path
        description: Project id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "403":
          description: Unauthorized operation
        "500":
          description: Internal server error
  /projects/projects/statuses/{id}:
    get:
      tags:
      - /projects
      summary: Gets the statuses by project id
      description: This returns the statuses by project id
      operationId: getStatusesByProjectId
      parameters:
      - name: id
        in: path
        description: Project id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /projects/projects/{id}:
    get:
      tags:
      - /projects
      summary: Gets  project by id
      description: This returns the default status by project id
      operationId: getProjectById
      parameters:
      - name: id
        in: path
        description: Project id
        required: true
        schema:
          type: integer
          format: int64
      - name: participatorParam
        in: query
        description: Participator Need
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Request fulfilled
        "403":
          description: Unauthorized operation
        "500":
          description: Internal server error
  /projects/updateproject/{projectId}:
    put:
      tags:
      - /projects
      summary: Update Project
      description: This Update Project info
      operationId: updateProject
      parameters:
      - name: projectId
        in: path
        description: projectId
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Project object to update
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/ProjectDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /projects/users/{query}/{projectName}:
    get:
      tags:
      - /projects
      summary: Gets users by query and project name
      description: This returns users by query and project name
      operationId: getUsersByQueryAndProjectName
      parameters:
      - name: query
        in: path
        description: Query
        required: true
        schema:
          type: string
      - name: projectName
        in: path
        description: projectName
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Request fulfilled
  /projects/{projectId}:
    delete:
      tags:
      - /projects
      summary: Delete Project
      description: This deletes the Project
      operationId: deleteProject
      parameters:
      - name: projectId
        in: path
        description: projectId
        required: true
        schema:
          type: integer
          format: int64
      - name: deleteChild
        in: query
        description: deleteChild
        schema:
          type: boolean
          default: false
      - name: offset
        in: query
        description: Offset
        schema:
          type: integer
          format: int32
          default: 0
      - name: limit
        in: query
        description: Limit
        schema:
          type: integer
          format: int32
          default: -1
      responses:
        "204":
          description: Project deleted
        "400":
          description: Invalid query input
        "401":
          description: User not authorized to delete the Project
        "500":
          description: Internal server error
  /status:
    post:
      tags:
      - /status
      summary: Create Status
      description: This create new status
      operationId: addStatus
      requestBody:
        description: Status object to be created
        content:
          '*/*':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/StatusDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /status/move:
    put:
      tags:
      - /status
      summary: move Status
      description: This moves status
      operationId: moveStatus
      requestBody:
        description: Status to be moved
        content:
          '*/*':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/StatusDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /status/{statusId}:
    get:
      tags:
      - /status
      summary: get Status by Id
      description: This get status by Id
      operationId: getStatus
      parameters:
      - name: statusId
        in: path
        description: statusId
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
    put:
      tags:
      - /status
      summary: Update StatusId
      description: This Update status name
      operationId: updateStatus
      parameters:
      - name: statusId
        in: path
        description: statusId
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: status object to be updated
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/StatusDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
    delete:
      tags:
      - /status
      summary: Delete status
      description: This deletes the status
      operationId: deleteStatus
      parameters:
      - name: statusId
        in: path
        description: status Id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Project deleted
        "400":
          description: Invalid query input
        "401":
          description: User not authorized to delete the Project
        "500":
          description: Internal server error
  /tasks:
    get:
      tags:
      - /tasks
      summary: Gets uncompleted tasks of the authenticated user
      description: "This returns uncompleted tasks of the authenticated user in the\
        \ following cases: <br/><ul><li>The authenticated is the creator of the task</li><li>The\
        \ authenticated is the assignee of the task</li><li>The authenticated is a\
        \ coworker of the task</li></ul>"
      operationId: getTasks
      parameters:
      - name: status
        in: query
        description: "Type of task to get (all, incoming, overdue)"
        schema:
          type: string
      - name: q
        in: query
        description: Search term
        schema:
          type: string
      - name: spaceId
        in: query
        description: Space id
        schema:
          type: array
          items:
            type: integer
            format: int64
      - name: sortField
        in: query
        description: Field to sort by
        schema:
          type: string
      - name: sortDirection
        in: query
        description: Sort order (asc or desc)
        schema:
          type: string
      - name: offset
        in: query
        description: Offset
        schema:
          type: integer
          format: int32
          default: 0
      - name: limit
        in: query
        description: Limit
        schema:
          type: integer
          format: int32
          default: 20
      - name: returnSize
        in: query
        description: Returning the number of tasks or not
        schema:
          type: boolean
          default: false
      - name: returnDetails
        in: query
        description: Returning All Details
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Request fulfilled
    post:
      tags:
      - /tasks
      summary: Add a new task
      description: This adds a new task.
      operationId: addTask
      requestBody:
        description: task object to be updated
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/TaskDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/clone/{taskId}:
    post:
      tags:
      - /tasks
      summary: Clones a specific task by id
      description: This clones the task if the authenticated user has permissions
        to edit the objects linked to this task.
      operationId: cloneTask
      parameters:
      - name: taskId
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/comments/{commentId}:
    delete:
      tags:
      - /tasks
      summary: Deletes a specific task comment by id
      description: This deletes a specific task comment by id
      operationId: deleteComment
      parameters:
      - name: commentId
        in: path
        description: Comment id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/comments/{commentId}/{id}:
    post:
      tags:
      - /tasks
      summary: Adds a sub comment to a specific parent comment by id and a specific
        task by id
      description: This Adds sub comment to a parent comment in specific task by id
      operationId: addTaskSubComment
      parameters:
      - name: commentId
        in: path
        description: Comment id
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Comment text
        content:
          '*/*':
            schema:
              type: string
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/comments/{id}:
    get:
      tags:
      - /tasks
      summary: Gets a comment list of a specific task
      description: This returns a comment list of a specific task
      operationId: getTaskComments
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      - name: offset
        in: query
        description: Offset
        schema:
          type: integer
          format: int32
          default: 0
      - name: limit
        in: query
        description: Limit
        schema:
          type: integer
          format: int32
          default: -1
      responses:
        "200":
          description: Request fulfilled
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
    post:
      tags:
      - /tasks
      summary: Adds comment to a specific task by id
      description: This Adds comment to a specific task by id
      operationId: addTaskComment
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: Comment text
        content:
          '*/*':
            schema:
              type: string
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/filter:
    get:
      tags:
      - /tasks
      summary: Gets  a specific task
      description: This returns  a specific task
      operationId: filterTasks
      parameters:
      - name: statusDto
        in: query
        description: "Type of task to get (all, incoming, overdue)"
        schema:
          type: string
      - name: projectId
        in: query
        description: projectId term
        schema:
          type: integer
          format: int64
          default: -2
      - name: query
        in: query
        description: Search term
        schema:
          type: string
      - name: dueCategory
        in: query
        description: dueCategory term
        schema:
          type: string
      - name: priority
        in: query
        description: priority term
        schema:
          type: string
      - name: assignee
        in: query
        description: assignee term
        schema:
          type: string
      - name: coworker
        in: query
        description: coworker term
        schema:
          type: string
      - name: watcher
        in: query
        description: watchers term
        schema:
          type: string
      - name: showCompletedTasks
        in: query
        description: showCompletedTasks term
        schema:
          type: boolean
          default: false
      - name: statusId
        in: query
        description: statusId term
        schema:
          type: string
      - name: space_group_id
        in: query
        description: space_group_id term
        schema:
          type: string
      - name: groupBy
        in: query
        description: groupBy term
        schema:
          type: string
      - name: orderBy
        in: query
        description: orderBy term
        schema:
          type: string
      - name: dueDate
        in: query
        description: dueDate term
        schema:
          type: string
      - name: labelId
        in: query
        description: labelId term
        schema:
          type: integer
          format: int64
      - name: filterLabelIds
        in: query
        description: filterLabelIds term
        schema:
          type: string
      - name: offset
        in: query
        description: Offset
        schema:
          type: integer
          format: int32
          default: 0
      - name: limit
        in: query
        description: Limit
        schema:
          type: integer
          format: int32
          default: 20
      - name: returnSize
        in: query
        description: Returning the number of tasks or not
        schema:
          type: boolean
          default: false
      - name: returnDetails
        in: query
        description: Returning All Details
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Request ful
        "401":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/labels:
    get:
      tags:
      - /tasks
      summary: Gets labels of the authenticated user
      description: This returns labels of the authenticated user
      operationId: getLabels
      responses:
        "200":
          description: Request fulfilled
    post:
      tags:
      - /tasks
      summary: Adds a specific task by id to a label
      description: This adds a specific task by id to a label
      operationId: addLabel
      requestBody:
        description: label object to create
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/LabelDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/labels/project/{id}:
    get:
      tags:
      - /tasks
      summary: Gets labels of the given project
      description: This returns labels of the given project
      operationId: getLabelsByProjectId
      parameters:
      - name: id
        in: path
        description: project id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
  /tasks/labels/{id}:
    get:
      tags:
      - /tasks
      summary: Gets labels of a specific task by id
      description: This returns labels of a specific task by id
      operationId: getLabelsByTaskId
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "500":
          description: Internal server error
    post:
      tags:
      - /tasks
      summary: Adds a specific task by id to a label
      description: This adds a specific task by id to a label
      operationId: addTaskToLabel
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: label
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/LabelDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/labels/{id}/{labelId}:
    delete:
      tags:
      - /tasks
      summary: Deletes a specific task association to a specific label
      description: This deletes a specific task association to a specific label
      operationId: removeTaskFromLabel
      parameters:
      - name: labelId
        in: path
        description: label id
        required: true
        schema:
          type: integer
          format: int64
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/labels/{labelId}:
    put:
      tags:
      - /tasks
      summary: Adds a specific task by id to a label
      description: This adds a specific task by id to a label
      operationId: editLabel
      parameters:
      - name: labelId
        in: path
        description: label id
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: label object to update
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/LabelDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
    delete:
      tags:
      - /tasks
      summary: Deletes a specific  label
      description: This deletes a specific task association to a specific label
      operationId: removeLabel
      parameters:
      - name: labelId
        in: path
        description: label id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/logs/{id}:
    get:
      tags:
      - /tasks
      summary: Gets a logs of a specific task
      description: This returns a logs of a specific task
      operationId: getTaskLogs
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      - name: offset
        in: query
        description: Offset
        schema:
          type: integer
          format: int32
          default: 0
      - name: limit
        in: query
        description: Limit
        schema:
          type: integer
          format: int32
          default: -1
      responses:
        "200":
          description: Request fulfilled
        "401":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/project/{id}:
    get:
      tags:
      - /tasks
      summary: Gets tasks by projectIdr
      description: This returns list of tasks by project
      operationId: getTasksByProjectId
      parameters:
      - name: id
        in: path
        description: Id
        required: true
        schema:
          type: integer
          format: int64
          default: 0
      - name: offset
        in: query
        description: Offset
        schema:
          type: integer
          format: int32
          default: 0
      - name: limit
        in: query
        description: Limit
        schema:
          type: integer
          format: int32
          default: 0
      - name: completed
        in: query
        description: Returning the Completed tasks
        schema:
          type: boolean
          default: false
      - name: returnSize
        in: query
        description: Returning the number of tasks or not
        schema:
          type: boolean
          default: false
      - name: returnDetails
        in: query
        description: Returning All Details
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Request fulfilled
  /tasks/updateCompleted/{idTask}:
    put:
      tags:
      - /tasks
      summary: Updates a specific task by id
      description: This updates the task if the authenticated user has permissions
        to view the objects linked to this task.
      operationId: updateCompleted
      parameters:
      - name: idTask
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      - name: isCompleted
        in: query
        description: isCompleted
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
  /tasks/usersToMention/{query}:
    get:
      tags:
      - /tasks
      summary: Gets users to mention in comment
      description: This returns users to mention in comment
      operationId: findUsersToMention
      parameters:
      - name: query
        in: path
        description: Query
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Request fulfilled
  /tasks/{id}:
    get:
      tags:
      - /tasks
      summary: Get task by id
      description: This get the task if the authenticated user has permissions to
        view the objects linked to this task.
      operationId: getTaskById
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
    put:
      tags:
      - /tasks
      summary: Updates a specific task by id
      description: This updates the task if the authenticated user has permissions
        to view the objects linked to this task.
      operationId: updateTaskById
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        description: task object to be updated
        content:
          '*/*':
            schema:
              $ref: '#/components/schemas/TaskDto'
        required: true
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
    delete:
      tags:
      - /tasks
      summary: Updates a specific task by id
      description: This updates the task if the authenticated user has permissions
        to view the objects linked to this task.
      operationId: deleteTaskById
      parameters:
      - name: id
        in: path
        description: Task id
        required: true
        schema:
          type: integer
          format: int64
      responses:
        "200":
          description: Request fulfilled
        "400":
          description: Invalid query input
        "403":
          description: Unauthorized operation
        "404":
          description: Resource not found
components:
  schemas:
    ChangeLog:
      type: object
      properties:
        actionName:
          type: string
        author:
          type: string
        createdTime:
          type: integer
          format: int64
        id:
          type: integer
          format: int64
        target:
          type: string
        task:
          $ref: '#/components/schemas/Task'
    Comment:
      type: object
      properties:
        author:
          type: string
        comment:
          type: string
        createdTime:
          type: string
          format: date-time
        id:
          type: integer
          format: int64
        mentionedUsers:
          uniqueItems: true
          type: array
          items:
            type: string
        parentComment:
          $ref: '#/components/schemas/Comment'
        subComments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        task:
          $ref: '#/components/schemas/Task'
    Label:
      type: object
      properties:
        children:
          type: array
          items:
            $ref: '#/components/schemas/Label'
        color:
          type: string
        hidden:
          type: boolean
        id:
          type: integer
          format: int64
        name:
          type: string
        parent:
          $ref: '#/components/schemas/Label'
        project:
          $ref: '#/components/schemas/Project'
        tasks:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/LabelTaskMapping'
        username:
          type: string
    LabelDto:
      type: object
      properties:
        canEdit:
          type: boolean
        children:
          type: array
          items:
            $ref: '#/components/schemas/LabelDto'
        color:
          type: string
        hidden:
          type: boolean
        id:
          type: integer
          format: int64
        name:
          type: string
        parent:
          $ref: '#/components/schemas/LabelDto'
        project:
          $ref: '#/components/schemas/ProjectDto'
        username:
          type: string
    LabelTaskMapping:
      type: object
      properties:
        label:
          $ref: '#/components/schemas/Label'
        task:
          $ref: '#/components/schemas/Task'
    Project:
      type: object
      properties:
        children:
          type: array
          items:
            $ref: '#/components/schemas/Project'
        color:
          type: string
        description:
          type: string
        dueDate:
          type: string
          format: date-time
        hiddenOn:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/UserSetting'
        id:
          type: integer
          format: int64
        labels:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/Label'
        lastModifiedDate:
          type: integer
          format: int64
        manager:
          uniqueItems: true
          type: array
          items:
            type: string
        name:
          type: string
        parent:
          $ref: '#/components/schemas/Project'
        participator:
          uniqueItems: true
          type: array
          items:
            type: string
        status:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/Status'
    ProjectDto:
      type: object
      properties:
        children:
          type: array
          items:
            $ref: '#/components/schemas/ProjectDto'
        color:
          type: string
        description:
          type: string
        dueDate:
          type: string
          format: date-time
        hiddenOn:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/UserSetting'
        id:
          type: integer
          format: int64
        lastModifiedDate:
          type: integer
          format: int64
        manager:
          uniqueItems: true
          type: array
          items:
            type: string
        name:
          type: string
        parent:
          $ref: '#/components/schemas/ProjectDto'
        participator:
          uniqueItems: true
          type: array
          items:
            type: string
        spaceName:
          type: string
        status:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/StatusDto'
    Status:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        project:
          $ref: '#/components/schemas/Project'
        rank:
          type: integer
          format: int32
        tasks:
          type: array
          items:
            $ref: '#/components/schemas/Task'
    StatusDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        project:
          $ref: '#/components/schemas/ProjectDto'
        rank:
          type: integer
          format: int32
        tasks:
          type: array
          items:
            $ref: '#/components/schemas/Task'
    Task:
      type: object
      properties:
        activityId:
          type: string
        assignee:
          type: string
        comments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        completed:
          type: boolean
        context:
          type: string
        coworker:
          uniqueItems: true
          type: array
          items:
            type: string
        createdBy:
          type: string
        createdTime:
          type: string
          format: date-time
        description:
          type: string
        dueDate:
          type: string
          format: date-time
        endDate:
          type: string
          format: date-time
        id:
          type: integer
          format: int64
        labels:
          type: array
          items:
            $ref: '#/components/schemas/LabelTaskMapping'
        logs:
          type: array
          items:
            $ref: '#/components/schemas/ChangeLog'
        priority:
          type: string
          enum:
          - NONE
          - LOW
          - NORMAL
          - HIGH
        rank:
          type: integer
          format: int32
        startDate:
          type: string
          format: date-time
        status:
          $ref: '#/components/schemas/Status'
        title:
          type: string
        watcher:
          uniqueItems: true
          type: array
          items:
            type: string
    TaskDto:
      type: object
      properties:
        activityId:
          type: string
        assignee:
          type: string
        completed:
          type: boolean
        context:
          type: string
        coworker:
          uniqueItems: true
          type: array
          items:
            type: string
        createdBy:
          type: string
        createdTime:
          type: string
          format: date-time
        description:
          type: string
        dueDate:
          type: string
          format: date-time
        endDate:
          type: string
          format: date-time
        id:
          type: integer
          format: int64
        priority:
          type: string
          enum:
          - NONE
          - LOW
          - NORMAL
          - HIGH
        rank:
          type: integer
          format: int32
        startDate:
          type: string
          format: date-time
        status:
          $ref: '#/components/schemas/StatusDto'
        title:
          type: string
        watcher:
          uniqueItems: true
          type: array
          items:
            type: string
    UserSetting:
      type: object
      properties:
        hiddenProjects:
          uniqueItems: true
          type: array
          items:
            $ref: '#/components/schemas/Project'
        showHiddenLabel:
          type: boolean
        showHiddenProject:
          type: boolean
        username:
          type: string
