Compare commits

...

6 commits

Author SHA1 Message Date
Rajbir Singh
096c25e33b PMT-40: Implement Endpoint
All checks were successful
Quality Check / Validate OAS (push) Successful in 53s
Quality Check / Validate OAS (pull_request) Successful in 1m3s
Quality Check / Linting (push) Successful in 2m12s
Quality Check / Linting (pull_request) Successful in 2m13s
Quality Check / Testing (push) Successful in 2m26s
Quality Check / Testing (pull_request) Successful in 2m23s
Quality Check / Static Analysis (push) Successful in 2m33s
Quality Check / Static Analysis (pull_request) Successful in 2m28s
Co-authored-by: Dominik Säume <dominik.saeume@hmmh.de>
2024-10-24 09:49:53 +02:00
Rajbir Singh
79ab6f7f48 PMT-40: define Endpoint 2024-10-24 09:44:46 +02:00
06360ad1c6
Merge pull request 'PMT-37: Alle informationen eines bestimmten Projektes abrufen' (!19) from story/PMT-37-alles-informationen-eines into trunk
All checks were successful
Quality Check / Validate OAS (push) Successful in 33s
Quality Check / Linting (push) Successful in 1m12s
Quality Check / Testing (push) Successful in 1m17s
Quality Check / Static Analysis (push) Successful in 1m20s
Reviewed-on: #19
2024-10-24 08:00:52 +00:00
7fc105308a
PMT-37: implement endpoint testing
All checks were successful
Quality Check / Validate OAS (push) Successful in 33s
Quality Check / Linting (push) Successful in 1m10s
Quality Check / Static Analysis (push) Successful in 1m17s
Quality Check / Testing (push) Successful in 1m17s
Quality Check / Validate OAS (pull_request) Successful in 32s
Quality Check / Linting (pull_request) Successful in 1m10s
Quality Check / Static Analysis (pull_request) Successful in 1m20s
Quality Check / Testing (pull_request) Successful in 1m19s
2024-10-24 09:52:07 +02:00
3dd06fbf0c
PMT-37: implement Endpoint 2024-10-24 09:50:42 +02:00
ce038dc725
PMT-37: define Endpoint 2024-10-24 09:50:16 +02:00
4 changed files with 198 additions and 5 deletions

View file

@ -27,6 +27,31 @@ components:
type: array type: array
items: items:
$ref: "#/components/schemas/ProjectInfo" $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
realEnd:
type: string
format: date-time
CreateProjectDTO: CreateProjectDTO:
type: object type: object
properties: properties:
@ -87,6 +112,31 @@ components:
plannedEnd: plannedEnd:
type: string type: string
format: date-time format: date-time
Project:
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
realEnd:
type: string
format: date-time
AddEmployeeDTO: AddEmployeeDTO:
type: object type: object
properties: properties:
@ -135,6 +185,13 @@ components:
type: array type: array
items: items:
$ref: "#/components/schemas/Employee" $ref: "#/components/schemas/Employee"
EmployeeProjectsDTO:
type: object
properties:
projects:
type: array
items:
$ref: '#/components/schemas/Project'
responses: responses:
Unauthorized: Unauthorized:
description: "Unauthorized" description: "Unauthorized"
@ -213,6 +270,31 @@ paths:
$ref: "#/components/responses/ServiceUnavailable" $ref: "#/components/responses/ServiceUnavailable"
/project/{id}: /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: post:
operationId: "addEmployee" operationId: "addEmployee"
description: "Adds an employee to a specific Project" description: "Adds an employee to a specific Project"
@ -366,3 +448,27 @@ paths:
$ref: '#/components/responses/NotFound' $ref: '#/components/responses/NotFound'
500: 500:
$ref: "#/components/responses/InternalError" $ref: "#/components/responses/InternalError"
/employye/{id}/projects:
get:
description: "getAllProjects"
operationId: "Get a List of all Projects from a specific Employee"
parameters:
- in: path
name: id
schema:
type: integer
format: int64
required: true
responses:
200:
content:
application/json:
schema:
$ref: "#/components/schemas/EmployeeProjectsDTO"
description: 'Get a List of all Projects from a specific Employee'
401:
$ref: "#/components/responses/Unauthorized"
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalError'

View file

@ -3,6 +3,7 @@ package de.hmmh.pmt;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import de.hmmh.pmt.db.*; import de.hmmh.pmt.db.*;
import de.hmmh.pmt.db.Project;
import de.hmmh.pmt.dtos.*; import de.hmmh.pmt.dtos.*;
import de.hmmh.pmt.employee.ApiClientFactory; import de.hmmh.pmt.employee.ApiClientFactory;
import de.hmmh.pmt.employee.dtos.EmployeeResponseDTO; import de.hmmh.pmt.employee.dtos.EmployeeResponseDTO;
@ -72,6 +73,18 @@ public class ApiController implements DefaultApi {
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@Override
public ResponseEntity<GetAllProjectInfoDTO> getProjectInfo(Long id){
Optional<Project> optionalProject = projectRepository.findById(id);
if (optionalProject.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
Project project = optionalProject.get();
return ResponseEntity.ok(mapper.mapToGet(project));
}
@Override @Override
public ResponseEntity<Void> updateProject(Long id, UpdateProjectDTO body) { public ResponseEntity<Void> updateProject(Long id, UpdateProjectDTO body) {
Optional<Project> optionalProject = projectRepository.findById(id); Optional<Project> optionalProject = projectRepository.findById(id);
@ -225,4 +238,19 @@ public class ApiController implements DefaultApi {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
} }
} }
@Override
public ResponseEntity<EmployeeProjectsDTO> getAListOfAllProjectsFromASpecificEmployee(Long id) {
List<Allocation> allocationsByEmployee = allocationRepository.findAllByEmployeeId(id);
Set<Project> projects = allocationsByEmployee.stream()
.map(Allocation::getProject)
.collect(Collectors.toSet());
EmployeeProjectsDTO response = new EmployeeProjectsDTO();
for (Project project : projects) {
response.addProjectsItem(mapper.mapProject(project));
}
return new ResponseEntity<>(HttpStatus.OK);
}
} }

View file

@ -1,13 +1,10 @@
package de.hmmh.pmt.util; package de.hmmh.pmt.util;
import de.hmmh.pmt.db.Project; import de.hmmh.pmt.db.Project;
import de.hmmh.pmt.dtos.CreateProjectDTO; import de.hmmh.pmt.dtos.*;
import de.hmmh.pmt.dtos.CreatedProjectDTO;
import de.hmmh.pmt.dtos.Employee;
import de.hmmh.pmt.dtos.Qualification ;
import de.hmmh.pmt.employee.dtos.EmployeeResponseDTO; import de.hmmh.pmt.employee.dtos.EmployeeResponseDTO;
import de.hmmh.pmt.employee.dtos.QualificationGetDTO; import de.hmmh.pmt.employee.dtos.QualificationGetDTO;
import de.hmmh.pmt.dtos.UpdateProjectDTO;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
@ -37,6 +34,19 @@ public class Mapper {
return dto; return dto;
} }
public GetAllProjectInfoDTO mapToGet(Project project) {
GetAllProjectInfoDTO dto = new GetAllProjectInfoDTO();
dto.setId(project.getId());
dto.setName(project.getName());
dto.setGoal(project.getGoal());
dto.setCustomerId(project.getCustomerId());
dto.setAdministratorId(project.getAdministratorId());
dto.setStart(project.getStart());
dto.setPlannedEnd(project.getPlannedEnd());
dto.setRealEnd(project.getRealEnd());
return dto;
}
public Employee map(EmployeeResponseDTO employeeResponseDTO) { public Employee map(EmployeeResponseDTO employeeResponseDTO) {
Employee dto = new Employee(); Employee dto = new Employee();
dto.setId(employeeResponseDTO.getId()); dto.setId(employeeResponseDTO.getId());
@ -72,4 +82,16 @@ public class Mapper {
project.setPlannedEnd(dto.getPlannedEnd()); project.setPlannedEnd(dto.getPlannedEnd());
return project; return project;
} }
public de.hmmh.pmt.dtos.Project mapProject(Project project){
de.hmmh.pmt.dtos.Project dto = new de.hmmh.pmt.dtos.Project();
dto.setId(project.getId());
dto.setName(project.getName());
dto.setGoal(project.getGoal());
dto.setCustomerId(project.getCustomerId());
dto.setAdministratorId(project.getAdministratorId());
dto.setStart(project.getStart());
dto.setPlannedEnd(project.getPlannedEnd());
dto.setRealEnd(project.getRealEnd());
return dto;
}
} }

View file

@ -0,0 +1,37 @@
package de.hmmh.pmt.project;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.Map;
import org.junit.jupiter.api.Test;
import de.hmmh.pmt.IntegrationTest;
import de.hmmh.pmt.db.Project;
public class GetProjectInfoTest extends IntegrationTest {
@Test
void noProject() throws Exception {
mvc
.perform(get(baseUri + "/project/1"))
.andExpect(status().isNotFound());
}
@Test
void getProjectInfo() throws Exception {
Map<String, Project> allProjects = createTestProjectData();
Project spaceStation = allProjects.get("space-station");
mvc
.perform(get(baseUri + "/project/" +spaceStation.getId()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").value(spaceStation.getId()))
.andExpect(jsonPath("$.name").value(spaceStation.getName()))
.andExpect(jsonPath("$.goal").value(spaceStation.getGoal()))
.andExpect(jsonPath("$.customerId").value(spaceStation.getCustomerId()))
.andExpect(jsonPath("$.administratorId").value(spaceStation.getAdministratorId()))
;
}
}