Skip to content
Draft

poc #961

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/main/java/uk/gov/hmcts/dts/fact/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import uk.gov.hmcts.dts.fact.mapit.MapitClient;

@SpringBootApplication
@EnableFeignClients(basePackageClasses = MapitClient.class)
@EnableFeignClients
@ImportAutoConfiguration({FeignAutoConfiguration.class})
@SuppressWarnings("HideUtilityClassConstructor") // Spring needs a constructor, its not a utility class
public class Application {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package uk.gov.hmcts.dts.fact.clients;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import uk.gov.hmcts.dts.fact.config.AzureMapsFeignConfiguration;
import uk.gov.hmcts.dts.fact.model.RouteMatrixRequest;
import uk.gov.hmcts.dts.fact.model.RouteMatrixResponse;

@FeignClient(
name = "azureMapsRouteMatrixClient",
url = "https://atlas.microsoft.com",
configuration = AzureMapsFeignConfiguration.class
)
public interface AzureMapsRouteMatrixClient {

@PostMapping(
value = "/route/matrix",
consumes = MediaType.APPLICATION_JSON_VALUE
)
RouteMatrixResponse calculateMatrix(
@RequestParam("api-version") String apiVersion,
@RequestBody RouteMatrixRequest body
);
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package uk.gov.hmcts.dts.fact.config;

import feign.RequestInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AzureMapsFeignConfiguration {

@Value("${azure.maps.client-id}")
private String clientId;

@Value("${azure.maps.subscription-key}")
private String subscriptionKey;

@Bean
public RequestInterceptor azureMapsRequestInterceptor() {
return template -> {
template.header("x-ms-client-id", clientId);
template.query("subscription-key", subscriptionKey);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import uk.gov.hmcts.dts.fact.entity.CourtByRoadDistance;
import uk.gov.hmcts.dts.fact.model.CourtReferenceWithDistance;
import uk.gov.hmcts.dts.fact.model.CourtWithDistance;
import uk.gov.hmcts.dts.fact.model.ServiceAreaWithCourtReferencesWithDistance;
Expand Down Expand Up @@ -90,6 +91,15 @@ public ResponseEntity<List<CourtReferenceWithDistance>> findCourtsByPostcode(
return ok(courtService.getNearestCourtReferencesByPostcode(postcode));
}

@GetMapping(path = "/results/accurate/{postcode}")
public ResponseEntity<List<CourtByRoadDistance>> findCourtsByPostcodeAccurate(@Pattern(regexp =
"([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z]\\d{1,2})|(([A-Za-z]"
+ "[A-Ha-hJ-Yj-y]\\d{1,2})|(([A-Za-z]\\d[A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y]"
+ "\\d[A-Za-z]?))))\\s?\\d[A-Za-z]{2})",
message = "Provided postcode is not valid") @PathVariable String postcode) {
return ok(courtService.getCourtsByPostcodeAccurate(postcode));
}

/**
* Find courts by postcode and Service Area.
* @param postcode The postcode to search for
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package uk.gov.hmcts.dts.fact.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class CourtByRoadDistance {
private Integer id;
private String name;
private String slug;
private Double lat;
private Double lon;
private Double distanceMiles;
private Double travelTimeMinutes;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package uk.gov.hmcts.dts.fact.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.Instant;

@Entity
@Table(name = "court_road_distance_cache")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CourtRoadDistanceCache {
@Id
private String postcode;

private String responseJson;

private Instant computedAt;
}
20 changes: 20 additions & 0 deletions src/main/java/uk/gov/hmcts/dts/fact/model/Feature.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package uk.gov.hmcts.dts.fact.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Map;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Feature {

private final String type = "Feature";

private Geometry geometry;

private Map<String, String> properties;
}

18 changes: 18 additions & 0 deletions src/main/java/uk/gov/hmcts/dts/fact/model/Geometry.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package uk.gov.hmcts.dts.fact.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Geometry {

private final String type = "MultiPoint";

private List<List<Double>> coordinates;
}

17 changes: 17 additions & 0 deletions src/main/java/uk/gov/hmcts/dts/fact/model/MatrixCell.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package uk.gov.hmcts.dts.fact.model;

import lombok.Data;

@Data
public class MatrixCell {

private int statusCode;
private int originIndex;
private int destinationIndex;

private int durationInSeconds;
private int durationTrafficInSeconds;

private double distanceInMeters;
}

13 changes: 13 additions & 0 deletions src/main/java/uk/gov/hmcts/dts/fact/model/Properties.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package uk.gov.hmcts.dts.fact.model;

import lombok.Data;

import java.util.List;

@Data
public class Properties {

private Summary summary;
private List<MatrixCell> matrix;
}

19 changes: 19 additions & 0 deletions src/main/java/uk/gov/hmcts/dts/fact/model/RouteMatrixRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package uk.gov.hmcts.dts.fact.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.util.List;

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RouteMatrixRequest {

private final String type = "FeatureCollection";

private List<Feature> features;

private String travelMode = "driving";
private String optimizeRoute = "fastest";
}

12 changes: 12 additions & 0 deletions src/main/java/uk/gov/hmcts/dts/fact/model/RouteMatrixResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package uk.gov.hmcts.dts.fact.model;

import lombok.Data;

@Data
public class RouteMatrixResponse {

private String type;
private Geometry geometry;
private Properties properties;
}

11 changes: 11 additions & 0 deletions src/main/java/uk/gov/hmcts/dts/fact/model/Summary.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package uk.gov.hmcts.dts.fact.model;

import lombok.Data;

@Data
public class Summary {

private int totalCount;
private int successfulCount;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package uk.gov.hmcts.dts.fact.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import uk.gov.hmcts.dts.fact.entity.CourtRoadDistanceCache;

public interface CourtRoadDistanceCacheRepository extends JpaRepository<CourtRoadDistanceCache, String> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public interface CourtWithDistanceRepository extends JpaRepository<CourtWithDist
String ORDER_BY_DISTANCE_C_NAME = "ORDER BY distance, c.name ";
String LIMIT_10 = "LIMIT 10";
String LIMIT_1 = "LIMIT 1";
String LIMIT_PARAM = "limit";
String LAT = "lat";
String LON = "lon";
String AND_UPPER_AOL_NAME_UPPER_AOL = "AND UPPER(aol.name) = UPPER(:aol) ";
Expand All @@ -32,6 +33,14 @@ public interface CourtWithDistanceRepository extends JpaRepository<CourtWithDist
+ LIMIT_10)
List<CourtWithDistance> findNearestTen(@Param(LAT) Double lat, @Param(LON) Double lon);

@Query(nativeQuery = true,
value = SELECT_POINT_C_LON_C_LAT_POINT_LON_LAT_AS_DISTANCE
+ FROM_SEARCH_COURT_AS_C
+ WHERE_C_DISPLAYED
+ "ORDER BY distance, name "
+ "LIMIT 50")
List<CourtWithDistance> findNearestX(@Param(LAT) Double lat, @Param(LON) Double lon, @Param(LIMIT_PARAM) Integer limit);

@Query(nativeQuery = true,
value = SELECT_POINT_C_LON_C_LAT_POINT_LON_LAT_AS_DISTANCE
+ FROM_SEARCH_COURT_AS_C
Expand Down
Loading