openapi: 3.0.1 info: title: Project API description: Latihan Project API version: 2.0.0 servers: - url: http://localhost:8080/api/v1 tags: - name: projects description: everything project - name: platforms description: everything platform paths: /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'