feat(db+domain): add turniernummer and einschraenkungen fields for tournament scope and constraints

- **Database Changes:** Introduced `turnier_nummer` (mandatory, 5 digits) and `einschraenkungen` (mandatory, ÖTO-specific constraints) columns in `turniere` table. Seeded `turnier_nummer` with `oeps_turniernummer` where applicable.
- **Domain Models:** Extended `Turnier` and `DomTurnier` with `turnierNummer` and `einschraenkungen` fields. Added `TeilnehmerKreisE` enum for mapping restriction types.
- **Services and Controllers:** Updated repository and service operations to handle the new fields. Controllers reflect the new request models for creation and updates.
- **Validation:** Enforced input validation for `turnierNummer` format and `einschraenkungen` values.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-07 15:07:18 +02:00
parent 7bf89c58d3
commit 6b9177e818
9 changed files with 119 additions and 7 deletions
@@ -3,6 +3,7 @@
package at.mocode.events.domain.model
import at.mocode.core.domain.model.SparteE
import at.mocode.core.domain.model.TeilnehmerKreisE
import at.mocode.core.domain.model.TurnierkategorieE
import at.mocode.core.domain.model.TurnierStatusE
import at.mocode.events.domain.validation.TurnierBewerbDescriptor
@@ -48,9 +49,11 @@ data class DomTurnier(
// Basis-Informationen
var name: String,
val turnierNummer: String,
var sparte: SparteE,
var kategorie: TurnierkategorieE,
var datum: LocalDate,
var einschraenkungen: List<TeilnehmerKreisE> = emptyList(),
// Funktionäre
@Serializable(with = UuidSerializer::class)
@@ -98,6 +101,9 @@ data class DomTurnier(
if (name.isBlank()) {
warnings.add("Turniername ist erforderlich.")
}
if (!Regex("^\\d{5}$").matches(turnierNummer)) {
warnings.add("Turniernummer muss exakt 5 Ziffern enthalten (z.B. 26128).")
}
maxBewerbe?.let { max ->
if (max <= 0) {
warnings.add("Maximale Bewerb-Anzahl muss positiv sein.")