openapi: 3.0.0
servers:
    - description: SwaggerHub API Auto Mocking
      url: https://virtserver.swaggerhub.com/C4theBomb/qOverflow/1.0.0
    - description: Localhost Server
      url: http://localhost:3000/api
info:
    version: '1.0.0'
    title: qOverflow API
    description: >-
        This API will interact with the BDPA API to expand operations and cache data to bypass rate limitations. It also implements enforcement features to prevent unauthorized operations. Authorization is done through the `authorization` header and has two scopes, `bearer` and `basic`.

paths:
    /users:
        post:
            summary: Register a new user
            requestBody:
                required: true
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                username:
                                    type: string
                                email:
                                    type: string
                                    format: email
                                password:
                                    type: string
            responses:
                '200':
                    description: OK
                '400':
                    $ref: '#/components/responses/BadRequest'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
        patch:
            summary: Modify user information
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                email:
                                    type: string
                                    format: email
                                password:
                                    type: string
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /users/{username}:
        parameters:
            - name: username
              in: path
              required: true
              schema:
                  type: string
                  example: 'pinapplezzz'
              description: >-
                  This should be the username of the desired user.
        get:
            summary: Get a user by their username
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    user:
                                        $ref: '#/components/schemas/User'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /users/questions:
        get:
            summary: Get all questions written by logged in user
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    questions:
                                        type: array
                                        items:
                                            $ref: '#/components/schemas/Question'
            tags:
                - users
    /users/answers:
        get:
            summary: Get all answers written by logged in user
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    answers:
                                        type: array
                                        items:
                                            $ref: '#/components/schemas/Answer'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /users/login:
        post:
            summary: Login a user and receiver an authentication token
            security:
                - BasicAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                remember:
                                    type: boolean
                                    enum: [true, false]
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    user:
                                        $ref: '#/components/schemas/User'
                                    token:
                                        type: string
                '400':
                    $ref: '#/components/responses/BadRequest'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /users/remember:
        get:
            summary: Retrieve authenticated data of the user
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    user:
                                        $ref: '#/components/schemas/User'
                '400':
                    $ref: '#/components/responses/BadRequest'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /users/logout:
        delete:
            summary: Login a user and receiver an authentication token
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '400':
                    $ref: '#/components/responses/BadRequest'
                '401':
                    $ref: '#/components/responses/Unauthorized'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /users/delete:
        delete:
            summary: Permanently delete a user's account
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '400':
                    $ref: '#/components/responses/BadRequest'
                '401':
                    $ref: '#/components/responses/Unauthorized'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /users/reset:
        post:
            summary: Get a link for the user to reset their password
            requestBody:
                required: true
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                username:
                                    type: string
                                    example: 'pinapplezzz'
                description: >-
                    Username of the user that need to reset their password.
            responses:
                '200':
                    description: OK
            tags:
                - users
    /users/reset/{id}:
        parameters:
            - name: id
              in: path
              required: true
              schema:
                  type: string
                  example: '62d61301c3fd83c49d35173d'
              description: >-
                  This should be the ID of the request that was created in the request page.
        post:
            summary: Reset the user's password
            requestBody:
                required: true
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                password:
                                    type: string
            responses:
                '200':
                    description: OK
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - users
    /mail:
        get:
            summary: Get all of the logged in user's incoming mail
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    messages:
                                        type: array
                                        items:
                                            $ref: '#/components/schemas/Mail'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - mail
        post:
            summary: Send out outgoing mail for the logged in user
            security:
                - BearerAuth: []
            requestBody:
                required: true
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                receiver:
                                    type: string
                                    example: 'pinapplezzz'
                                subject:
                                    type: string
                                text:
                                    type: string
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    message:
                                        $ref: '#/components/schemas/Mail'
                '400':
                    $ref: '#/components/responses/BadRequest'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - mail
    /questions:
        post:
            summary: Create a new question
            security:
                - BearerAuth: []
            requestBody:
                required: true
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                title:
                                    type: string
                                text:
                                    type: string
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    question:
                                        $ref: '#/components/schemas/Question'
                '400':
                    $ref: '#/components/responses/BadRequest'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - questions
    /questions/search:
        get:
            summary: Get a sorted set of 100 questions or search for a question
            parameters:
                - name: after
                  in: query
                  schema:
                      type: string
                      example: '62d6c5dc47c1eefc7acbc917'
                  description: >-
                      The route will return the next 100 objects after this id
                - name: match
                  in: query
                  schema:
                      type: object
                  description: >-
                      See [BDPA's qOverflow API](https://hscc8udvc7gs.docs.apiary.io/#/reference/0/question-endpoints/questions-search-get) for documentation
                - name: regexMatch
                  in: query
                  schema:
                      type: object
                  description: >-
                      See [BDPA's qOverflow API](https://hscc8udvc7gs.docs.apiary.io/#/reference/0/question-endpoints/questions-search-get) for documentation
                - name: sort
                  in: query
                  schema:
                      type: string
                      nullable: true
                      example: 'uvc'
                      enum: ['u', 'uvc', 'uvac']
                  description: >-
                      See [BDPA's qOverflow API](https://hscc8udvc7gs.docs.apiary.io/#/reference/0/question-endpoints/questions-search-get) for documentation
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    questions:
                                        type: array
                                        items:
                                            $ref: '#/components/schemas/Question'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - questions
    /questions/{questionID}:
        parameters:
            - $ref: '#/components/parameters/questionID'
        get:
            summary: Get a question by its questionID
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    question:
                                        $ref: '#/components/schemas/Question'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - questions
        patch:
            summary: Modify a question by its questionID
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                text:
                                    type: string
            responses:
                '200':
                    description: OK
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - questions
    /questions/{questionID}/close:
        parameters:
            - $ref: '#/components/parameters/questionID'
        patch:
            summary: Toggle vote to close a question
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - questions
    /questions/{questionID}/protect:
        parameters:
            - $ref: '#/components/parameters/questionID'
        patch:
            summary: Toggle vote to protect a question
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - questions
    /questions/{questionID}/reopen:
        parameters:
            - $ref: '#/components/parameters/questionID'
        patch:
            summary: Toggle vote to reopen a question
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - questions
    /questions/{questionID}/vote:
        parameters:
            - $ref: '#/components/parameters/questionID'
        get:
            summary: Get a user's vote on a question
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'
            tags:
                - questions
        patch:
            summary: Modify a user's vote on a question
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                operation:
                                    type: string
                                    enum: ['upvote', 'downvote']
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'

                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - questions
    /questions/{questionID}/comments:
        parameters:
            - $ref: '#/components/parameters/questionID'
        get:
            summary: Get all comments of a question
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    comments:
                                        type: array
                                        items:
                                            $ref: '#/components/schemas/Comment'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - comments
        post:
            summary: Create a comment on a question
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                text:
                                    type: string
                                    maxLength: 150
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    comment:
                                        $ref: '#/components/schemas/Comment'
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - comments
    /questions/{questionID}/comments/{commentID}:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/commentID'
        delete:
            summary: Delete a question comment
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '403':
                    $ref: '#/components/responses/Forbidden'
                '404':
                    $ref: '#/components/responses/NotFound'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - comments
    /questions/{questionID}/comments/{commentID}/vote:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/commentID'
        get:
            summary: Get a user's vote on a question comment
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'
            tags:
                - comments
                - votes
        patch:
            summary: Modify a user's vote on a question comment
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                operation:
                                    type: string
                                    enum: ['upvote', 'downvote']
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'

                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - comments
                - votes
    /questions/{questionID}/answers:
        parameters:
            - $ref: '#/components/parameters/questionID'
        get:
            summary: Get all answers of a question
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    answers:
                                        type: array
                                        items:
                                            $ref: '#/components/schemas/Answer'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - answers
        post:
            summary: Answer a question
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                text:
                                    type: string
                                    maxLength: 3000
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    answer:
                                        $ref: '#/components/schemas/Answer'
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - answers
    /questions/{questionID}/answers/{answerID}:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/answerID'
        patch:
            summary: Modify an answer by its answerID
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                text:
                                    type: string
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    answer:
                                        $ref: '#/components/schemas/Answer'
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - answers
    /questions/{questionID}/answers/{answerID}/accept:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/answerID'
        patch:
            summary: Accept an answer as correct
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '403':
                    $ref: '#/components/responses/Forbidden'
                '404':
                    $ref: '#/components/responses/NotFound'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - answers
    /questions/{questionID}/answers/{answerID}/vote:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/answerID'
        get:
            summary: Get a user's vote on an answer
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'
            tags:
                - answers
                - votes
        patch:
            summary: Modify a user's vote on an answer
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                operation:
                                    type: string
                                    enum: ['upvote', 'downvote']
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'

                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - answers
                - votes
    /questions/{questionID}/answers/{answerID}/comments:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/answerID'
        get:
            summary: Get all comments of a answer
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    comments:
                                        type: array
                                        items:
                                            $ref: '#/components/schemas/Comment'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - comments
        post:
            summary: Create a comment on an answer
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                text:
                                    type: string
                                    maxLength: 150
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    comment:
                                        $ref: '#/components/schemas/Comment'
                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - comments
    /questions/{questionID}/answers/{answerID}/comments/{commentID}:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/answerID'
            - $ref: '#/components/parameters/commentID'
        delete:
            summary: Delete an answer comment
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                '403':
                    $ref: '#/components/responses/Forbidden'
                '404':
                    $ref: '#/components/responses/NotFound'
                '500':
                    $ref: '#/components/responses/ServerError'
            tags:
                - comments
    /questions/{questionID}/answers/{answerID}/comments/{commentID}/vote:
        parameters:
            - $ref: '#/components/parameters/questionID'
            - $ref: '#/components/parameters/answerID'
            - $ref: '#/components/parameters/commentID'
        get:
            summary: Get a user's vote on an answer comment
            security:
                - BearerAuth: []
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'
            tags:
                - comments
                - votes
        patch:
            summary: Modify a user's vote on an answer comment
            security:
                - BearerAuth: []
            requestBody:
                content:
                    'application/json':
                        schema:
                            type: object
                            properties:
                                operation:
                                    type: string
                                    enum: ['upvote', 'downvote']
            responses:
                '200':
                    description: OK
                    content:
                        'application/json':
                            schema:
                                type: object
                                properties:
                                    vote:
                                        $ref: '#/components/schemas/Vote'

                '400':
                    $ref: '#/components/responses/BadRequest'
                '403':
                    $ref: '#/components/responses/Forbidden'
                '500':
                    $ref: '#/components/responses/BadRequest'
            tags:
                - comments
                - votes

components:
    securitySchemes:
        BasicAuth:
            type: http
            scheme: basic
            description: >-
                This is the username and password authentication method used for the login route. The authorization header should be equal to `basic {base64 encoded username:password}` encoded into base64. The base64 encoding can be found by running `btoa(username:password)`.
        BearerAuth:
            type: http
            scheme: bearer
            bearerFormat: jwt
            description: >-
                This is the JWT token authentication method used for other routes requiring user privileges. The authorization header should be equal to `bearer {JTW Token}`. The token is returned in the token property of the `/users/login` response.
    schemas:
        Answer:
            type: object
            properties:
                id:
                    type: string
                    example: '62d8727d6c584b3b12eb23be'
                questionID:
                    type: string
                    example: '62d5c7ad1b8e0da8804bde22'
                creator:
                    type: string
                    example: 'pinapplezzz'
                text:
                    type: string
                upvotes:
                    type: integer
                downvotes:
                    type: integer
                accepted:
                    type: boolean
                createdAt:
                    type: string
                    format: date-time
        Comment:
            type: object
            properties:
                id:
                    type: string
                    example: '62d87292afa7f2e7e81f1470'
                parentID:
                    type: string
                    example: '62d5c7ad1b8e0da8804bde22'
                creator:
                    type: string
                    example: 'pinapplezzz'
                text:
                    type: string
                upvotes:
                    type: integer
                downvotes:
                    type: integer
                createdAt:
                    type: string
                    format: date-time
        Mail:
            type: object
            properties:
                id:
                    type: string
                    example: '62d872a27584c3df08a2330b'
                sender:
                    type: string
                    example: 'pinapplezzz'
                receiver:
                    type: string
                    example: 'pinapplezzz'
                subject:
                    type: string
                    maxLength: 45
                text:
                    type: string
                    maxLength: 150
                createdAt:
                    type: string
                    format: date-time
        Question:
            type: object
            properties:
                id:
                    type: string
                    example: '62d872b85acd7bccf9087d77'
                title:
                    type: string
                    maxLength: 150
                text:
                    type: string
                    maxLength: 3000
                status:
                    type: string
                    enum: ['open', 'protected', 'closed']
                views:
                    type: integer
                answers:
                    type: integer
                comments:
                    type: integer
                upvotes:
                    type: integer
                downvotes:
                    type: integer
                hasAccepted:
                    type: boolean
                creator:
                    type: string
                    example: 'pinapplezzz'
                reopen:
                    type: array
                    items:
                        type: string
                        example: 'pinapplezzz'
                close:
                    type: array
                    items:
                        type: string
                        example: 'pinapplezzz'
                protect:
                    type: array
                    items:
                        type: string
                        example: 'pinapplezzz'
                createdAt:
                    type: string
                    format: date-time
        User:
            type: object
            properties:
                username:
                    type: string
                    example: 'pinapplezzz'
                email:
                    type: string
                    format: email
                points:
                    type: integer
                level:
                    type: integer
        Vote:
            type: string
            nullable: true
            enum: ['upvoted', 'downvoted', 'null']
    responses:
        BadRequest:
            description: Bad request
            content:
                'application/json':
                    schema:
                        type: object
                        properties:
                            error:
                                type: string
                                example: 'Your request is missing information.'
        ServerError:
            description: Server Error
            content:
                'application/json':
                    schema:
                        type: object
                        properties:
                            error:
                                type: string
                                example: 'Oops! Something went wrong.'
        Unauthorized:
            description: User unauthorized
            content:
                'application/json':
                    schema:
                        type: object
                        properties:
                            error:
                                type: string
                                example: 'You are unauthenticated. Please inclue your JWT.'
        Forbidden:
            description: User not allowed
            content:
                'application/json':
                    schema:
                        type: object
                        properties:
                            error:
                                type: string
                                example: 'You are not authorized to do that.'
        NotFound:
            description: Not Found
            content:
                'application/json':
                    schema:
                        type: object
                        properties:
                            error:
                                type: string
                                example: 'That resource was not found. Please check your request and try again.'
    parameters:
        questionID:
            name: questionID
            in: path
            required: true
            schema:
                type: string
                example: '62d61d428849dda1c15a8b64'
            description: >-
                This should be the object id of the desired question.
        answerID:
            name: answerID
            in: path
            required: true
            schema:
                type: string
                example: '62d61ffd5f20e06f3cb350c7'
            description: >-
                This should be the object id of the desired answer.
        commentID:
            name: commentID
            in: path
            required: true
            schema:
                type: string
                example: '62d620175bdb35fbb86e33cb'
            description: >-
                This should be the object id of the desired comment.
