| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 | openapi: 3.0.1info:  title: Project API  description: Latihan Project API  version: 2.0.0servers:- url: http://localhost:8080/api/v1tags:- name: projects  description: everything project- name: platforms  description: everything platformpaths:  /projects:    get:      tags:      - projects      summary: find all project      description: return all project      operationId: getProject      responses:        200:          $ref: '#/components/responses/200AP'        204:          $ref: '#/components/responses/204'    post:      tags:      - projects      summary: Add new Project      description: Add new Project      operationId: addProject      requestBody:        $ref: '#/components/requestBodies/Project'      responses:        201:          $ref: '#/components/responses/201'        400:          $ref: '#/components/responses/400'        409:          $ref: '#/components/responses/409'        413:          $ref: '#/components/responses/413'  /projects/{projectId}:    get:      tags:      - projects      summary: find project by ID      description: return project      operationId: getProjectById      parameters:        - $ref: '#/components/parameters/projectPath'      responses:        200:          $ref: '#/components/responses/200SP'        404:          $ref: '#/components/responses/404'    put:      tags:      - projects      summary: update existing project by ID      description: update project      operationId: updateProjectById      parameters:        - $ref: '#/components/parameters/projectPath'      requestBody:        $ref: '#/components/requestBodies/Project'      responses:        200:          $ref: '#/components/responses/200AP'        400:          $ref: '#/components/responses/400'        404:          $ref: '#/components/responses/404'        409:          $ref: '#/components/responses/409'        413:          $ref: '#/components/responses/413'    delete:      tags:      - projects      summary: Deletes a project       description: delete a project      operationId: deleteProject      parameters:        - $ref: '#/components/parameters/projectPath'      responses:        200:          description: successful operation        205:          description: Unable to delete. Data is used.        404:          $ref: '#/components/responses/404'  /platforms:    get:      tags:       - platforms      summary: find all platform of a project      description: return all platform of a project      operationId: getPlatformByProjectId      parameters:         - $ref: '#/components/parameters/projectQuery'      responses:        200:          description: successful operation          content:            application/json:              schema:                type: array                items:                   $ref: '#/components/schemas/Platform'        204:          $ref: '#/components/responses/204'    post:      tags:       - platforms      summary: Add new platform for a project      description: add new platform for a project      operationId: addPlatformByProjectId      parameters:         - name: project          in: query          description: Project ID          required: true          schema:            type: integer      requestBody:        description: Platform object        required: true        content:          application/json:            schema:              type: object              properties:                name:                  type: string                  example: web      responses:        201:          description: record successfully added          content:            application/json:              schema:                $ref: '#/components/schemas/Platform'        400:          $ref: '#/components/responses/400'        404:          $ref: '#/components/responses/404'        409:          $ref: '#/components/responses/409'        413:          $ref: '#/components/responses/413'            /platforms/{platformId}:    get:      tags:       - platforms      summary: find platform by ID      description: return platform by ID      operationId: getPlatformById      parameters:         - $ref: '#/components/parameters/platformPath'      responses:        200:          description: successful operation          content:            application/json:              schema:                $ref: '#/components/schemas/Platform'        404:          $ref: '#/components/responses/404'    put:      tags:       - platforms      summary: update existing platform by ID      description: update platform      operationId: updatePlatformById      parameters:         - $ref: '#/components/parameters/platformPath'      requestBody:        description: Platform object        required: true        content:          application/json:            schema:              type: object              properties:                name:                  type: string                  example: web                project_id:                  type: integer                  example: 1      responses:        200:          description: successful operation          content:            application/json:              schema:                $ref: '#/components/schemas/Platform'        400:          $ref: '#/components/responses/400'        404:          $ref: '#/components/responses/404'        409:          $ref: '#/components/responses/409'        413:          $ref: '#/components/responses/413'    delete:      tags:       - platforms      summary: deletes a platform by ID      description: delete a platform by ID      operationId: deletePlatformById      parameters:         - $ref: '#/components/parameters/platformPath'      responses:        200:          description: successful operation        404:          $ref: '#/components/responses/404'components:  schemas:    Project:      required:        - id        - name      type: object      properties:        id:          type: integer          uniqueItems: true          example: 2        name:          type: string          uniqueItems: true          maximum: 100          example: PI        description:          type: string          maximum: 255          example: PropInspector    Platform:      type: object      required:         - id        - name      properties:        id:          type: integer          uniqueItems: true          example: 3        name:          type: string          uniqueItems: true          maximum: 100          example: mobile        project_id:          $ref: '#/components/schemas/Project'  parameters:    projectPath:      name: projectId      in: path      description: Project ID      required: true      schema:        type: integer    platformPath:      name: platformId      in: path      description: Platform ID      required: true      schema:        type: integer    projectQuery:      name: project      in: query      description: Project ID      schema:        type: integer  responses:    200SP:      description: successful operation      content:        application/json:          schema:            $ref: '#/components/schemas/Project'    200AP:      description: successful operation      content:        application/json:          schema:            type: array            items:              $ref: '#/components/schemas/Project'    201:      description: Record Successfully added      content:        application/json:          schema:            $ref: '#/components/schemas/Project'    204:      description: empty data    400:      description: invalid data    404:      description: ID not found    409:      description: duplicate data    413:      description: content too large  requestBodies:    Project:      description: Project object       required: true      content:         application/json:            schema:              type: object              properties:                name:                  type: string                  example: TM                description:                  type: string                  example: TelMesengger    Platform:      description: Platform object      required: true      content:        application/json:          schema:            type: object            properties:              name:                type: string                example: mobile              project_id:                $ref: '#/components/schemas/Project'
 |