Introduce Altitude record, enhance altitude handling, and expand models

- Added `Altitude` record for unified altitude representation with conversions between meters and feet.
- Updated `Coordinate` and `TrackCoordinate` to use `Altitude` instead of raw altitude values.
- Introduced `FlightStatus` enum for distinguishing flight stages.
- Enhanced `Task` with a `scoringPeriodeEnd` field and added altitude-related updates to `Competition`.
This commit is contained in:
Jan Meinl
2026-05-14 12:32:23 +02:00
parent 5ac820fc5a
commit afc21046d4
7 changed files with 42 additions and 9 deletions
@@ -1,6 +1,7 @@
package dev.coph.flightscore.backend.competition;
import dev.coph.flightscore.backend.competition.contact.CompetitionContact;
import dev.coph.flightscore.backend.coordinate.Altitude;
import dev.coph.flightscore.backend.coordinate.Coordinate;
import dev.coph.simpleutilities.ulid.ULID;
import lombok.Getter;
@@ -26,6 +27,7 @@ public class Competition {
private String location;
private String website;
private AltitudeSource altitudeSource;
private Altitude seperationAltitude;
private HashMap<String, Coordinate> commonLaunchPoints;
private HashSet<CompetitionContact> contacts;
@@ -0,0 +1,18 @@
package dev.coph.flightscore.backend.coordinate;
public record Altitude(double meters) {
public static final double FEET_PER_METER = 3.2808;
public static final double METERS_PER_FOOT = 0.3048;
public static Altitude fromFeet(double feet) {
return new Altitude(feet * METERS_PER_FOOT);
}
public static Altitude fromMeters(double meters) {
return new Altitude(meters);
}
public double feet() {
return meters * FEET_PER_METER;
}
}
@@ -9,20 +9,20 @@ public class Coordinate {
private final double latitude;
private final double longitude;
private final double pressureAltitude;
private final double gpsAltitude;
private final Altitude barometricAltitude;
private final Altitude gpsAltitude;
public Coordinate(double latitude, double longitude, double pressureAltitude, double gpsAltitude) {
public Coordinate(double latitude, double longitude, Altitude barometricAltitude, Altitude gpsAltitude) {
this.latitude = latitude;
this.longitude = longitude;
this.pressureAltitude = pressureAltitude;
this.barometricAltitude = barometricAltitude;
this.gpsAltitude = gpsAltitude;
}
public Coordinate(double latitude, double longitude, double altitude) {
public Coordinate(double latitude, double longitude, Altitude altitude) {
this.latitude = latitude;
this.longitude = longitude;
this.pressureAltitude = altitude;
this.barometricAltitude = altitude;
this.gpsAltitude = altitude;
}
}
@@ -16,8 +16,8 @@ public class TrackCoordinate extends Coordinate {
private final String additionalDigits;
private final double variometer;
public TrackCoordinate(Instant time, double latitude, double longitude, PositionValid positionValid, double pressureAltitude, double gpsAltitude, int gpsAccuracy, int satelliteCount, String additionalDigits, double variometer) {
super(latitude, longitude, pressureAltitude, gpsAltitude);
public TrackCoordinate(Instant time, double latitude, double longitude, PositionValid positionValid, Altitude barometricAltitude, Altitude gpsAltitude, int gpsAccuracy, int satelliteCount, String additionalDigits, double variometer) {
super(latitude, longitude, barometricAltitude, gpsAltitude);
this.time = time;
this.positionValid = positionValid;
this.gpsAccuracy = gpsAccuracy;
@@ -10,6 +10,7 @@ import java.time.LocalDate;
public class Flight {
private int flightNumber;
private FlightStatus status;
private FlightType type;
private LocalDate date;
private Daytime daytime;
@@ -0,0 +1,10 @@
package dev.coph.flightscore.backend.flight;
public enum FlightStatus {
DRAFT,
LIVE,
COMPLETED,
CANCELLED
}
@@ -3,9 +3,11 @@ package dev.coph.flightscore.backend.task;
import lombok.Getter;
import lombok.experimental.Accessors;
import java.time.Instant;
@Getter
@Accessors(fluent = true)
public class Task {
private int taskNumber;
private Instant scoringPeriodeEnd;
}