Passed
Push — master ( 16ccd1...8623b8 )
by Filip
02:49
created

com.hltech.judged.server.interfaces.rest.interrelationship.InterrelationshipController   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 27
dl 0
loc 36
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getServiceContracts(ServiceId) 0 7 1
A getServicesIds(String) 0 4 1
A getInterrelationship(String) 0 14 1
1
package com.hltech.judged.server.interfaces.rest.interrelationship;
2
3
import com.hltech.judged.server.domain.ServiceId;
4
import com.hltech.judged.server.domain.environment.Environment;
5
import com.hltech.judged.server.interfaces.rest.contracts.ServiceContractsDto;
6
import com.hltech.judged.server.domain.contracts.ServiceContracts;
7
import com.hltech.judged.server.domain.contracts.ServiceContractsRepository;
8
import com.hltech.judged.server.domain.environment.EnvironmentRepository;
9
import io.swagger.annotations.ApiOperation;
10
import io.swagger.annotations.ApiResponse;
11
import io.swagger.annotations.ApiResponses;
12
import lombok.RequiredArgsConstructor;
13
import org.springframework.http.MediaType;
14
import org.springframework.web.bind.annotation.CrossOrigin;
15
import org.springframework.web.bind.annotation.GetMapping;
16
import org.springframework.web.bind.annotation.PathVariable;
17
import org.springframework.web.bind.annotation.RestController;
18
19
import java.util.ArrayList;
20
import java.util.HashSet;
21
import java.util.Set;
22
import java.util.stream.Collectors;
23
24
@RestController
25
@RequiredArgsConstructor
26
public class InterrelationshipController {
27
28
    private final EnvironmentRepository environmentRepository;
29
    private final ServiceContractsRepository serviceContractsRepository;
30
31
    @CrossOrigin
32
    @GetMapping(value = "/interrelationship/{environment}", produces = MediaType.APPLICATION_JSON_VALUE)
33
    @ApiOperation(value = "Get interrelationship between services in given environment", nickname = "Validate against environment")
34
    @ApiResponses(value = {
35
        @ApiResponse(code = 200, message = "Success", response = InterrelationshipDto.class),
36
        @ApiResponse(code = 500, message = "Failure")
37
    })
38
    public InterrelationshipDto getInterrelationship (@PathVariable("environment") String env) {
39
        Set<ServiceContractsDto> serviceContractsSet = getServicesIds(env).stream()
40
            .map(this::getServiceContracts)
41
            .map(ServiceContractsDto::fromDomain)
42
            .collect(Collectors.toSet());
43
44
        return new InterrelationshipDto(env, serviceContractsSet);
45
    }
46
47
    private ServiceContracts getServiceContracts(ServiceId serviceId) {
48
        return serviceContractsRepository.findOne(new ServiceId(serviceId.getName(), serviceId.getVersion()))
49
            .orElseGet(() ->
50
                new ServiceContracts(
51
                    new ServiceId(serviceId.getName(), serviceId.getVersion()),
52
                    new ArrayList<>(),
53
                    new ArrayList<>()));
54
    }
55
56
    private Set<ServiceId> getServicesIds(String environmentName) {
57
        return this.environmentRepository.find(environmentName)
58
            .map(Environment::getAllServices)
59
            .orElse(new HashSet<>());
60
    }
61
}
62