openapi: 3.0.0 info: title: Project Management API description: An API for Managing Internal tools version: 1.0.0 servers: - url: /api/v1 security: - JWTAuth: [] components: securitySchemes: JWTAuth: type: http scheme: bearer bearerFormat: JWT schemas: ProjectInfo: type: object properties: id: type: integer format: int64 name: type: string GetAllProjectsDTO: type: array items: $ref: "#/components/schemas/ProjectInfo" GetAllProjectInfoDTO: type: object properties: id: type: integer format: int64 name: type: string goal: type: string customerId: type: integer format: int64 administratorId: type: integer format: int64 start: type: string format: date-time plannedEnd: type: string format: date-time CreateProjectDTO: type: object properties: name: type: string goal: type: string customerId: type: integer format: int64 administratorId: type: integer format: int64 start: type: string format: date-time plannedEnd: type: string format: date-time UpdateProjectDTO: type: object properties: name: type: string goal: type: string customerId: type: integer format: int64 administratorId: type: integer format: int64 start: type: string format: date-time plannedEnd: type: string format: date-time CreatedProjectDTO: type: object properties: id: type: integer format: int64 name: type: string goal: type: string customerId: type: integer format: int64 administratorId: type: integer format: int64 start: type: string format: date-time plannedEnd: type: string format: date-time AddEmployeeDTO: type: object properties: employeeId: type: integer format: int64 qualificationId: type: integer format: int64 Employee: type: object properties: id: type: integer format: int64 lastName: type: string firstName: type: string street: type: string postcode: maxLength: 5 minLength: 5 type: string city: type: string phone: type: string skillSet: type: array items: $ref: '#/components/schemas/Qualification' Qualification: type: object properties: skill: type: string id: type: integer format: int64 ProjectEmployeesDTO: type: object properties: employees: type: array items: $ref: "#/components/schemas/Employee" responses: Unauthorized: description: "Unauthorized" NotFound: description: "Not Found" content: text/plain: schema: type: string Conflict: description: "Conflict" content: text/plain: schema: type: string UnprocessableContent: description: "Unprocessable Content" content: text/plain: schema: type: string InternalError: description: "Internal Server Error" content: text/plain: schema: type: string ServiceUnavailable: description: "Service Unavailable" content: text/plain: schema: type: string paths: /project: get: operationId: "getAllProjects" description: "Get a List of all Projects" responses: 200: description: "Returns a List of all Projects" content: application/json: schema: $ref: "#/components/schemas/GetAllProjectsDTO" 401: $ref: "#/components/responses/Unauthorized" 500: $ref: "#/components/responses/InternalError" post: operationId: "CreateProject" description: "Creates a new Project" requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateProjectDTO" responses: 201: description: "Project created successfully" content: application/json: schema: $ref: "#/components/schemas/CreatedProjectDTO" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" 409: $ref: "#/components/responses/Conflict" 422: $ref: "#/components/responses/UnprocessableContent" 500: $ref: "#/components/responses/InternalError" 503: $ref: "#/components/responses/ServiceUnavailable" /project/{id}: get: operationId: "getProjectInfo" description: "Get a list of all Project Informations" parameters: - in: path name: id schema: type: integer format: int64 required: true responses: 200: description: "Project Info recieved" content: application/json: schema: $ref: "#/components/schemas/GetAllProjectInfoDTO" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" 500: $ref: "#/components/responses/InternalError" 503: $ref: "#/components/responses/ServiceUnavailable" post: operationId: "addEmployee" description: "Adds an employee to a specific Project" parameters: - in: path name: id schema: type: integer format: int64 required: true requestBody: content: application/json: schema: $ref: "#/components/schemas/AddEmployeeDTO" responses: 204: description: "Employee successfully added to the specific Project" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" 409: $ref: "#/components/responses/Conflict" 422: $ref: "#/components/responses/UnprocessableContent" 500: $ref: "#/components/responses/InternalError" 503: $ref: "#/components/responses/ServiceUnavailable" put: operationId: "updateProject" description: "Updates a project" parameters: - in: path name: id schema: type: integer format: int64 required: true requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateProjectDTO" responses: 204: description: "Project updated successfully" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" 409: $ref: "#/components/responses/Conflict" 422: $ref: "#/components/responses/UnprocessableContent" 500: $ref: "#/components/responses/InternalError" 503: $ref: "#/components/responses/ServiceUnavailable" delete: operationId: "deleteProject" description: "Delete a specific Project" parameters: - in: path name: id schema: type: integer format: int64 required: true responses: 204: description: "Deletes a specific Project" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" 500: $ref: "#/components/responses/InternalError" /project/{id}/completed: post: operationId: "completeProject" description: "Complete a specific project" parameters: - in: path name: id schema: type: integer format: int64 required: true responses: 204: description: "Completed" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" 500: $ref: "#/components/responses/InternalError" /project/{id}/employee/{employeeId}: delete: operationId: "removeEmployeeFromProject" description: "Removes an employee from a Project" parameters: - in: path name: id schema: type: integer format: int64 required: true - in: path name: employeeId schema: type: integer format: int64 required: true responses: 204: description: "Deletes the employee from the Project" 401: $ref: "#/components/responses/Unauthorized" 404: $ref: "#/components/responses/NotFound" 409: $ref: "#/components/responses/Conflict" 500: $ref: "#/components/responses/InternalError" 503: $ref: "#/components/responses/ServiceUnavailable" /project/{id}/employees: get: description: "getAllEmployees" operationId: "Get a List of all Employees from a specific Project" parameters: - in: path name: id schema: type: integer format: int64 required: true responses: 200: content: application/json: schema: $ref: "#/components/schemas/ProjectEmployeesDTO" description: 'Get a List of all Employees from a specific Project ' 404: $ref: '#/components/responses/NotFound' 500: $ref: "#/components/responses/InternalError"