openapi: 3.1.0
x-stoplight:
  id: okoe8mh50pjec
info:
  title: chat
  version: '1.0'
servers:
  - url: 'http://chat:3010'
x-exegesis-controller: messagesController
paths:
  '/project/{projectId}/messages':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
    get:
      summary: Get Global messages
      tags: []
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Message'
      operationId: getGlobalMessages
      description: Get global messages for the project with Project ID provided
      parameters:
        - schema:
            type: string
          in: query
          name: before
        - schema:
            type: string
          in: query
          name: limit
    post:
      summary: Send Global message
      operationId: sendGlobalMessage
      responses:
        '201':
          description: OK
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Message'
            examples:
              example-1:
                value:
                  user_id: string
                  content: string
        description: 'UserID and Content of the message to be posted. '
      description: Send global message  for the project with Project ID provided
  '/project/{projectId}/thread/{threadId}/messages':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
      - schema:
          type: string
        name: threadId
        in: path
        required: true
    post:
      summary: Send message
      operationId: sendMessage
      responses:
        '201':
          description: Created
      description: Add a message to the thread with thread ID provided from the Project with Project ID provided.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Message'
        description: |-
          JSON object with :
          - user_id: Id of the user
          - content: Content of the message
  '/project/{projectId}/threads':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
    get:
      summary: Get Threads
      tags: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Thread'
              examples: {}
        '404':
          description: Not Found
      operationId: getThreads
      description: Get the list of threads for the project with Project ID provided
  '/project/{projectId}/thread/{threadId}/messages/{messageId}/edit':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
      - schema:
          type: string
        name: threadId
        in: path
        required: true
      - schema:
          type: string
        name: messageId
        in: path
        required: true
    post:
      summary: Edit message
      operationId: editMessage
      responses:
        '204':
          description: No Content
        '404':
          description: Not Found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                content:
                  type: string
                user_id:
                  type: string
                  readOnly: true
              required:
                - content
            examples: {}
        description: |-
          JSON object with :
          - content: Content of the message to edit
          - user_id: Id of the user (optional)
      description: |
        Update message with Message ID provided from the Thread ID and Project ID provided
  '/project/{projectId}/thread/{threadId}/messages/{messageId}':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
      - schema:
          type: string
        name: threadId
        in: path
        required: true
      - schema:
          type: string
        name: messageId
        in: path
        required: true
    delete:
      summary: Delete message
      operationId: deleteMessage
      responses:
        '204':
          description: No Content
      description: 'Delete message with Message ID provided, from the Thread with ThreadID and ProjectID provided'
  '/project/{projectId}/thread/{threadId}/user/{userId}/messages/{messageId}':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
      - schema:
          type: string
        name: threadId
        in: path
        required: true
      - schema:
          type: string
        name: userId
        in: path
        required: true
      - schema:
          type: string
        name: messageId
        in: path
        required: true
    delete:
      summary: Delete message written by a given user
      operationId: deleteUserMessage
      responses:
        '204':
          description: No Content
  '/project/{projectId}/thread/{threadId}/resolve':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
      - schema:
          type: string
        name: threadId
        in: path
        required: true
    post:
      summary: Resolve Thread
      operationId: resolveThread
      responses:
        '204':
          description: No Content
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: string
              required:
                - user_id
        description: |-
          JSON object with :
          - user_id: Id of the user.
      description: Mark Thread with ThreadID and ProjectID provided owned by the user with UserID provided as resolved.
  '/project/{projectId}/thread/{threadId}/reopen':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
      - schema:
          type: string
        name: threadId
        in: path
        required: true
    post:
      summary: Reopen Thread
      operationId: reopenThread
      responses:
        '204':
          description: No Content
      description: |-
        Reopen Thread with ThreadID and ProjectID provided.
        i.e unmark it as resolved.
  '/project/{projectId}/thread/{threadId}':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
      - schema:
          type: string
        name: threadId
        in: path
        required: true
    delete:
      summary: Delete thread
      operationId: deleteThread
      responses:
        '204':
          description: No Content
      description: Delete thread with ThreadID and ProjectID provided
  '/project/{projectId}/resolved-thread-ids':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
    get:
      summary: Get resolved thread ids
      operationId: getResolvedThreadIds
      responses:
        '200':
          description: Resolved thread ids
  '/project/{projectId}':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
    delete:
      summary: Destroy project
      operationId: destroyProject
      responses:
        '204':
          description: No Content
      description: 'Delete all threads from Project with Project ID provided, and all messages in those threads.'
  /status:
    get:
      summary: Check status
      tags: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
                description: chat is alive
      operationId: getStatus
      description: Check that the Chat service is alive
    head:
      summary: Check status
      tags: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: string
                description: chat is alive
      operationId: getStatus
      description: Check that the Chat service is alive
  '/project/{projectId}/duplicate-comment-threads':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
    post:
      summary: Duplicate comment threads
      operationId: duplicateCommentThreads
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                threads:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  newThreads:
                    type: object
                description: Mapping of old thread ids to their duplicated thread ids
      description: Duplicate a list of comment threads
  '/project/{projectId}/generate-thread-data':
    parameters:
      - schema:
          type: string
        name: projectId
        in: path
        required: true
    post:
      summary: Generate thread data to load into the frontend
      operationId: generateThreadData
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                threads:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
      description: Load threads and generate a json blob containing all messages in all the threads
components:
  schemas:
    Message:
      title: Message
      x-stoplight:
        id: ue9n1vvezlutw
      type: object
      examples:
        - user_id: string
        - content: string
      properties:
        user_id:
          type: string
        content:
          type: string
      required:
        - user_id
        - content
    Thread:
      title: Thread
      x-stoplight:
        id: 0ppt3jw4h5bua
      type: array
      items:
        $ref: '#/components/schemas/Message'
