Passed
Push — master ( bdc85c...30463f )
by Filip
02:52
created

validateAgainstEnvironments(List,String)   A

Complexity

Conditions 3

Size

Total Lines 30
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 26
c 1
b 0
f 0
dl 0
loc 30
rs 9.256
cc 3
1
package com.hltech.judged.server.interfaces.rest.validation;
2
3
import com.hltech.judged.server.domain.JudgeDApplicationService;
4
import com.hltech.judged.server.domain.ServiceId;
5
import com.hltech.judged.server.interfaces.rest.RequestValidationException;
6
import com.hltech.judged.server.interfaces.rest.environment.ServiceDto;
7
import io.swagger.annotations.ApiOperation;
8
import io.swagger.annotations.ApiResponse;
9
import io.swagger.annotations.ApiResponses;
10
import lombok.RequiredArgsConstructor;
11
import org.springframework.http.MediaType;
12
import org.springframework.web.bind.annotation.GetMapping;
13
import org.springframework.web.bind.annotation.PathVariable;
14
import org.springframework.web.bind.annotation.RequestParam;
15
import org.springframework.web.bind.annotation.RestController;
16
17
import java.util.List;
18
import java.util.stream.Collectors;
19
20
import static com.hltech.judged.server.interfaces.rest.validation.Converters.toDtos;
21
import static java.util.stream.Collectors.toList;
22
23
@RestController
24
@RequiredArgsConstructor
25
public class ValidationController {
26
27
    private final JudgeDApplicationService judgeD;
28
29
    @GetMapping(value = "/environment-compatibility-report", produces = MediaType.APPLICATION_JSON_VALUE)
30
    @ApiOperation(value = "Get validation report for contract between set of services and given environment as if those services were first deployed", nickname = "Validate services against environment")
31
    @ApiResponses(value = {
32
        @ApiResponse(code = 200, message = "Success", response = BatchValidationReportDto.class, responseContainer = "list"),
33
        @ApiResponse(code = 500, message = "Failure"),
34
        @ApiResponse(code = 404, message = "Service not found")
35
    })
36
    public List<BatchValidationReportDto> validateAgainstEnvironments(
37
        @RequestParam("services") List<String> services,
38
        @RequestParam("environment") String environment
39
    ) {
40
        List<ServiceId> serviceIds = services.stream()
41
            .map(service -> {
42
                if (service.contains(":") && service.indexOf(":") == service.lastIndexOf(":")) {
43
                    String[] serviceNameAndVersion = service.split(":");
44
                    return new ServiceId(serviceNameAndVersion[0], serviceNameAndVersion[1]);
45
                } else {
46
                    throw new RequestValidationException();
47
                }
48
            })
49
            .collect(Collectors.toUnmodifiableList());
50
51
        return judgeD.validatedServicesAgainstEnvironment(serviceIds, environment).asMap()
52
            .entrySet()
53
            .stream()
54
            .map(e -> BatchValidationReportDto.builder()
55
                .service(ServiceDto.builder().name(e.getKey().getName()).version(e.getKey().getVersion()).build())
56
                .validationReports(toDtos(e.getKey(), e.getValue()))
57
                .build())
58
            .collect(toList());
59
    }
60
61
    @GetMapping(value = "/environment-compatibility-report/{serviceName}:{serviceVersion:.+}", produces = MediaType.APPLICATION_JSON_VALUE)
62
    @ApiOperation(value = "Get validation report for contract between given service and given environment", nickname = "Validate service against environment")
63
    @ApiResponses(value = {
64
        @ApiResponse(code = 200, message = "Success", response = ContractValidationReportDto.class, responseContainer = "list"),
65
        @ApiResponse(code = 500, message = "Failure"),
66
        @ApiResponse(code = 404, message = "Service not found")
67
    })
68
    public List<ContractValidationReportDto> validateAgainstEnvironments(
69
        @PathVariable("serviceName") String name,
70
        @PathVariable("serviceVersion") String version,
71
        @RequestParam("environment") List<String> environments
72
    ) {
73
        ServiceId serviceId = new ServiceId(name, version);
74
75
        return toDtos(serviceId, judgeD.validateServiceAgainstEnvironments(serviceId, environments));
76
    }
77
}
78