Files
meldestelle/shared/src/commonMain/kotlin/at/mocode/model/veranstaltung/VeranstaltungsRahmen.kt
T
2025-06-30 13:25:44 +02:00

83 lines
3.9 KiB
Kotlin

package at.mocode.model.veranstaltung
import at.mocode.enums.EventStatusE
import at.mocode.serializers.KotlinInstantSerializer
import at.mocode.serializers.KotlinLocalDateSerializer
import at.mocode.serializers.UuidSerializer
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDate
import kotlinx.serialization.Serializable
/**
* Definiert den übergeordneten Rahmen einer Veranstaltung (z.B. ein Turnierwochenende),
* der ein oder mehrere spezifische OEPS-Turniere umfassen kann.
*
* @property veranstRahmenId Eindeutiger interner Identifikator für diesen Veranstaltungsrahmen (UUID).
* @property name Die offizielle oder werbewirksame Bezeichnung des Veranstaltungsrahmens
* (z.B. "Neumarkter Pferdesporttage 2025", "Pfingstturnier Sudenhof").
* @property eventTypIntern Optionale interne Klassifizierung des Events
* (z.B. "StandardWochenende", "Meisterschaftsevent", "Cupveranstaltung").
* @property ortName Name der Anlage oder des Hauptortes der Veranstaltung (z.B. "Reitanlage Stroblmair").
* @property ortStrasse Straße und Hausnummer des Veranstaltungsortes.
* @property ortPlz Postleitzahl des Veranstaltungsortes.
* @property ortOrt Ortschaft des Veranstaltungsortes.
* @property datumVonGesamt Startdatum des gesamten Veranstaltungsrahmens.
* @property datumBisGesamt Enddatum des gesamten Veranstaltungsrahmens.
* @property logoUrl Optionaler URL-Pfad zu einem Logo für den Veranstaltungsrahmen.
* @property webseiteUrl Optionale URL zur Webseite des Veranstaltungsrahmens oder des Veranstalters.
* @property hauptveranstalterDomVereinId Optionale Verknüpfung zum `DomVerein`,
* der als Hauptveranstalter dieses Rahmenevents auftritt.
* @property hauptKontaktpersonDomPersonId Optionale Verknüpfung zur `DomPerson`,
* die als Hauptansprechpartner für den gesamten Veranstaltungsrahmen dient.
* @property status Aktueller Status des Veranstaltungsrahmens (z.B. in Planung, genehmigt, aktiv).
* @property anmerkungenAllgemein Allgemeine Notizen oder Beschreibungen zum Veranstaltungsrahmen.
* @property berichtAnmerkungSanitaer Anmerkungen zu sanitären Anlagen für den Turnierbericht.
* @property berichtAnmerkungParkenEntladen Anmerkungen zu Park- und Entlademöglichkeiten.
* @property berichtAnmerkungSponsorenBetreuung Anmerkungen zur Sponsorenbetreuung.
* @property createdAt Zeitstempel der Erstellung dieses Datensatzes.
* @property updatedAt Zeitstempel der letzten Aktualisierung dieses Datensatzes.
*/
@Serializable
data class VeranstaltungsRahmen(
@Serializable(with = UuidSerializer::class)
val veranstRahmenId: Uuid = uuid4(),
var name: String,
var eventTypIntern: String? = null,
var ortName: String, // Kombiniert aus deinem ort_text oder spezifischer
var ortStrasse: String? = null,
var ortPlz: String? = null,
var ortOrt: String? = null, // Genauer Ort
@Serializable(with = KotlinLocalDateSerializer::class)
var datumVonGesamt: LocalDate,
@Serializable(with = KotlinLocalDateSerializer::class)
var datumBisGesamt: LocalDate,
var logoUrl: String? = null,
var webseiteUrl: String? = null,
@Serializable(with = UuidSerializer::class)
var hauptveranstalterDomVereinId: Uuid? = null, // FK zu DomVerein.vereinId
@Serializable(with = UuidSerializer::class)
var hauptKontaktpersonDomPersonId: Uuid? = null, // FK zu DomPerson.personId
var status: EventStatusE = EventStatusE.IN_PLANUNG,
var anmerkungenAllgemein: String? = null,
// Felder für übergreifende Turnierbericht-Aspekte
var berichtAnmerkungSanitaer: String? = null,
var berichtAnmerkungParkenEntladen: String? = null,
var berichtAnmerkungSponsorenBetreuung: String? = null,
@Serializable(with = KotlinInstantSerializer::class)
val createdAt: Instant = Clock.System.now(),
@Serializable(with = KotlinInstantSerializer::class)
var updatedAt: Instant = Clock.System.now()
)