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.
This commit is contained in:
Jan Meinl
2026-05-14 10:29:37 +02:00
parent 6e767ee703
commit 0621e4f376
7 changed files with 142 additions and 0 deletions
@@ -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<String, Coordinate> commonLaunchPoints;
private HashSet<CompetitionContact> contacts;
}
@@ -0,0 +1,11 @@
package dev.coph.flightscore.backend.competition;
public enum CompetitionType {
WORLD_CHAMPIONSHIP,
CONTINENTAL_CHAMPIONSHIP,
NATIONAL_CHAMPIONSHIP,
STATE_OR_REGIONAL_CHAMPIONSHIP,
OTHER;
}
@@ -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;
}
}
@@ -0,0 +1,9 @@
package dev.coph.flightscore.backend.competition.contact;
public enum ContactType {
ORGANISATOR,
EVENT_DIRECTOR,
SAFETY_OFFICER,
}
@@ -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;
}
}
@@ -0,0 +1,8 @@
package dev.coph.flightscore.backend.coordinate;
public enum PositionValid {
FIX_3D,
NO_FIX_OR_2D;
}
@@ -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;
}
}