openapi: 3.0.1 info: title: Project API description: Latihan Project API version: 3.0.0 servers: - url: http://localhost:8080/api/v1 tags: - name: projects description: everything project - name: platforms description: everything platform - name: users description: everything user paths: /projects: get: tags: - projects summary: find all project description: return all project operationId: getProject responses: 200: $ref: '#/components/responses/200AP' security: - basicAuth: [] 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' security: - basicAuth: [] /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' security: - basicAuth: [] 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' security: - basicAuth: [] 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' security: - basicAuth: [] /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' security: - basicAuth: [] post: tags: - platforms summary: Add new platform for a project description: add new platform for a project operationId: addPlatformByProjectId 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: 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' security: - basicAuth: [] /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' security: - basicAuth: [] 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' security: - basicAuth: [] 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' security: - basicAuth: [] /users: get: tags: - users summary: find all user description: return all user operationId: getUser responses: 200: description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/User' security: - basicAuth: [] post: tags: - users summary: add user description: add new user operationId: AddUser requestBody: description: User object required: true content: application/json: schema: type: object properties: username: type: string example: abi password: type: string example: abi name: type: string example: abi responses: 201: description: record successfully added content: application/json: schema: $ref: '#/components/schemas/User' 400: $ref: '#/components/responses/400' 409: $ref: '#/components/responses/409' 413: $ref: '#/components/responses/413' /users/{userId}: get: tags: - users summary: find user by userId description: return user by userId operationId: getUserByUserId parameters: - $ref: '#/components/parameters/UserPath' responses: 200: description: successful operation content: application/json: schema: $ref: '#/components/schemas/User' 404: $ref: '#/components/responses/404' security: - basicAuth: [] put: tags: - users summary: update existing user except password description: update user operationId: updateUserByUserId parameters: - $ref: '#/components/parameters/UserPath' requestBody: description: User object required: true content: application/json: schema: type: object properties: username: type: string example: abi name: type: string example: abidzar responses: 200: description: successful operation content: application/json: schema: $ref: '#/components/schemas/User' 400: $ref: '#/components/responses/400' 404: $ref: '#/components/responses/404' 409: $ref: '#/components/responses/409' 413: $ref: '#/components/responses/413' security: - basicAuth: [] delete: tags: - users summary: deletes a user by ID description: delete a user by ID operationId: deleteUserById parameters: - $ref: '#/components/parameters/UserPath' responses: 200: description: successful operation 404: $ref: '#/components/responses/404' security: - basicAuth: [] /users/{userId}/password: put: tags: - users summary: change password description: update user password operationId: updatePassword parameters: - $ref: '#/components/parameters/UserPath' requestBody: description: User object required: true content: application/json: schema: type: object properties: password: type: string example: abi123 responses: 200: description: successful operation content: application/json: schema: $ref: '#/components/schemas/User' 400: $ref: '#/components/responses/400' 404: $ref: '#/components/responses/404' security: - basicAuth: [] 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' User: type: object required: - id - username - password - name properties: id: type: integer uniqueItems: true example: 4 username: type: string uniqueItems: true maximum: 100 example: abi password: type: string maximum: 100 example: abi123 name: type: string maximum: 255 example: abidzar 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 UserPath: name: userId in: path description: User 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' 400: description: invalid data 404: description: 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' securitySchemes: basicAuth: type: http scheme: basic description: Use `user` / `password` as the test credentials