From 0621e4f376a5d0e0d61d89d65ab52bd4608192d3 Mon Sep 17 00:00:00 2001 From: Jan Meinl Date: Thu, 14 May 2026 10:29:37 +0200 Subject: [PATCH] Add competition and coordinate model classes with enums and relationships - Created `Competition`, `CompetitionType`, and `CompetitionContact` classes for representing competition details. - Implemented `Coordinate`, `TrackCoordinate`, and `PositionValid` for geographical data handling. - Added `ContactType` enum for competition contact categorization. --- .../backend/competition/Competition.java | 31 +++++++++++++++++++ .../backend/competition/CompetitionType.java | 11 +++++++ .../contact/CompetitionContact.java | 27 ++++++++++++++++ .../competition/contact/ContactType.java | 9 ++++++ .../backend/coordinate/Coordinate.java | 28 +++++++++++++++++ .../backend/coordinate/PositionValid.java | 8 +++++ .../backend/coordinate/TrackCoordinate.java | 28 +++++++++++++++++ 7 files changed, 142 insertions(+) create mode 100644 src/main/java/dev/coph/flightscore/backend/competition/Competition.java create mode 100644 src/main/java/dev/coph/flightscore/backend/competition/CompetitionType.java create mode 100644 src/main/java/dev/coph/flightscore/backend/competition/contact/CompetitionContact.java create mode 100644 src/main/java/dev/coph/flightscore/backend/competition/contact/ContactType.java create mode 100644 src/main/java/dev/coph/flightscore/backend/coordinate/Coordinate.java create mode 100644 src/main/java/dev/coph/flightscore/backend/coordinate/PositionValid.java create mode 100644 src/main/java/dev/coph/flightscore/backend/coordinate/TrackCoordinate.java diff --git a/src/main/java/dev/coph/flightscore/backend/competition/Competition.java b/src/main/java/dev/coph/flightscore/backend/competition/Competition.java new file mode 100644 index 0000000..cd6b0d8 --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/competition/Competition.java @@ -0,0 +1,31 @@ +package dev.coph.flightscore.backend.competition; + +import dev.coph.flightscore.backend.competition.contact.CompetitionContact; +import dev.coph.flightscore.backend.coordinate.Coordinate; +import dev.coph.simpleutilities.ulid.ULID; +import lombok.Getter; +import lombok.experimental.Accessors; + +import java.time.Instant; +import java.time.ZoneId; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Locale; + +@Getter +@Accessors(fluent = true) +public class Competition { + + private ULID id; + private String name; + private CompetitionType type; + private Instant startDate; + private Instant endDate; + private ZoneId timezone; + private Locale country; + private String location; + private String website; + private HashMap commonLaunchPoints; + private HashSet contacts; + +} diff --git a/src/main/java/dev/coph/flightscore/backend/competition/CompetitionType.java b/src/main/java/dev/coph/flightscore/backend/competition/CompetitionType.java new file mode 100644 index 0000000..0fdff2b --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/competition/CompetitionType.java @@ -0,0 +1,11 @@ +package dev.coph.flightscore.backend.competition; + +public enum CompetitionType { + + WORLD_CHAMPIONSHIP, + CONTINENTAL_CHAMPIONSHIP, + NATIONAL_CHAMPIONSHIP, + STATE_OR_REGIONAL_CHAMPIONSHIP, + OTHER; + +} diff --git a/src/main/java/dev/coph/flightscore/backend/competition/contact/CompetitionContact.java b/src/main/java/dev/coph/flightscore/backend/competition/contact/CompetitionContact.java new file mode 100644 index 0000000..e966f9d --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/competition/contact/CompetitionContact.java @@ -0,0 +1,27 @@ +package dev.coph.flightscore.backend.competition.contact; + +import dev.coph.simpleutilities.ulid.ULID; +import lombok.Getter; +import lombok.experimental.Accessors; + +@Getter +@Accessors(fluent = true) +public class CompetitionContact { + private final ULID id; + private ContactType type; + private String name; + private String email; + private String phone; + + public CompetitionContact(ULID id) { + this.id = id; + } + + public CompetitionContact(ULID id, ContactType type, String name, String email, String phone) { + this.id = id; + this.type = type; + this.name = name; + this.email = email; + this.phone = phone; + } +} diff --git a/src/main/java/dev/coph/flightscore/backend/competition/contact/ContactType.java b/src/main/java/dev/coph/flightscore/backend/competition/contact/ContactType.java new file mode 100644 index 0000000..37797cf --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/competition/contact/ContactType.java @@ -0,0 +1,9 @@ +package dev.coph.flightscore.backend.competition.contact; + +public enum ContactType { + + ORGANISATOR, + EVENT_DIRECTOR, + SAFETY_OFFICER, + +} diff --git a/src/main/java/dev/coph/flightscore/backend/coordinate/Coordinate.java b/src/main/java/dev/coph/flightscore/backend/coordinate/Coordinate.java new file mode 100644 index 0000000..0b8c3c6 --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/coordinate/Coordinate.java @@ -0,0 +1,28 @@ +package dev.coph.flightscore.backend.coordinate; + +import lombok.Getter; +import lombok.experimental.Accessors; + +@Getter +@Accessors(fluent = true) +public class Coordinate { + + private final double latitude; + private final double longitude; + private final double pressureAltitude; + private final double gpsAltitude; + + public Coordinate(double latitude, double longitude, double pressureAltitude, double gpsAltitude) { + this.latitude = latitude; + this.longitude = longitude; + this.pressureAltitude = pressureAltitude; + this.gpsAltitude = gpsAltitude; + } + + public Coordinate(double latitude, double longitude, double altitude) { + this.latitude = latitude; + this.longitude = longitude; + this.pressureAltitude = altitude; + this.gpsAltitude = altitude; + } +} diff --git a/src/main/java/dev/coph/flightscore/backend/coordinate/PositionValid.java b/src/main/java/dev/coph/flightscore/backend/coordinate/PositionValid.java new file mode 100644 index 0000000..fb6c6e3 --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/coordinate/PositionValid.java @@ -0,0 +1,8 @@ +package dev.coph.flightscore.backend.coordinate; + +public enum PositionValid { + + FIX_3D, + NO_FIX_OR_2D; + +} diff --git a/src/main/java/dev/coph/flightscore/backend/coordinate/TrackCoordinate.java b/src/main/java/dev/coph/flightscore/backend/coordinate/TrackCoordinate.java new file mode 100644 index 0000000..df11c98 --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/coordinate/TrackCoordinate.java @@ -0,0 +1,28 @@ +package dev.coph.flightscore.backend.coordinate; + +import lombok.Getter; +import lombok.experimental.Accessors; + +import java.time.Instant; + +@Getter +@Accessors(fluent = true) +public class TrackCoordinate extends Coordinate { + + private final Instant time; + private final PositionValid positionValid; + private final int gpsAccuracy; + private final int satelliteCount; + 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); + this.time = time; + this.positionValid = positionValid; + this.gpsAccuracy = gpsAccuracy; + this.satelliteCount = satelliteCount; + this.additionalDigits = additionalDigits; + this.variometer = variometer; + } +}