package com.zksy.cockpit.geometry; import com.fasterxml.jackson.annotation.JsonInclude; import com.zksy.cockpit.foundation.CockpitCoordinateValidation; import lombok.AllArgsConstructor; import lombok.Getter; import java.math.BigDecimal; import java.util.List; /** GeoJSON with explicit source coverage and coordinate eligibility as foreign members. */ @Getter public class CockpitFacilityGeometryResponse { private final String type = "FeatureCollection"; private final String generatedAt; private final List features; private final List coverage; public CockpitFacilityGeometryResponse(String generatedAt, List features, List coverage) { this.generatedAt = generatedAt; this.features = features; this.coverage = coverage; } @Getter @AllArgsConstructor public static class Feature { private final String type = "Feature"; private final String id; @JsonInclude(JsonInclude.Include.ALWAYS) private final Geometry geometry; private final Properties properties; } @Getter @AllArgsConstructor public static class Geometry { private final String type; // Point: [lon, lat]; LineString: [[lon, lat], [lon, lat]]. private final List coordinates; } @Getter @AllArgsConstructor public static class Properties { private final String source; private final String sourceId; private final String code; private final String name; private final String industry; private final String typeCode; private final String networkType; @JsonInclude(JsonInclude.Include.ALWAYS) private final String pointType; @JsonInclude(JsonInclude.Include.ALWAYS) private final String networkId; // Raw pairs remain available for objects whose GeoJSON geometry must be null. private final List> sourceCoordinates; private final CockpitCoordinateValidation coordinateValidation; // In source order; one for Point, start/end for LineString. private final List coordinateValidations; } @Getter @AllArgsConstructor public static class Coverage { private final String industry; private final String source; private final String geometryType; private final String state; private final String reason; private final int recordCount; private final int geometryCount; private final int renderableCount; } }