Meisterschaft: eine pro Saison, mit zugeordneten Turnieren

Auf Vorgabe des Auftraggebers umgestellt:
* genau eine Meisterschaft je Saison (unique auf saison_jahr)
* turnier.meisterschaft_id (nullable FK) statt bool zaehlt_meisterschaft;
  NULL = "o. M.". Kompat-Property turnier.zaehlt_meisterschaft bleibt.
* Teilwertungen (Erwachsene-Gesamt, Jugend J1-J5) sind (Kategorie, Klasse)-
  Sichten auf die eine Meisterschaft, keine eigenen Zeilen mehr
* meisterschaft_stand: kategorie + klasse_id + Unique je Wertung/Fahrer
* berechne_stand(kategorie=, klasse_id=), wertungen_fuer(), berechne_alle_wertungen()
* Read-API: /meisterschaften/{id}/stand[?wertung=], .../endlauf-qualifikation?wertung=
* Ingest: POST /turniere haengt zaehlende Turniere an die Jahres-Meisterschaft
* Initialmigration neu erzeugt (Projekt noch nicht ausgerollt); Seed: eine
  "HTH-Meisterschaft <jahr>"
* Tests angepasst/ergaenzt (61 gruen)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
linus
2026-09-05 19:52:25 +02:00
co-authored by Claude Sonnet 5
parent 1df633bdec
commit c33aaa1a4b
19 changed files with 513 additions and 199 deletions
+10 -6
View File
@@ -30,15 +30,19 @@ def test_seed_saison_streichresultate(seed_2026):
assert s.streichresultate_tabelle["4"] == 2
def test_seed_meisterschaften(seed_2026):
def test_seed_meisterschaft(seed_2026):
db = seed_2026
ms = db.scalars(select(Meisterschaft).where(Meisterschaft.saison_jahr == 2026)).all()
bezeichnungen = {m.bezeichnung for m in ms}
assert "HTH Erwachsene 2026" in bezeichnungen
assert "HTH Jugend J 3 2026" in bezeichnungen
# genau EINE Meisterschaft pro Saison
assert len(ms) == 1
assert ms[0].bezeichnung == "HTH-Meisterschaft 2026"
# O-1: Platzhalter-Punktetabelle ist markiert
erw = next(m for m in ms if m.bezeichnung == "HTH Erwachsene 2026")
assert "_hinweis" in erw.regelwerk
assert "_hinweis" in ms[0].regelwerk
from oamc.meisterschaft.berechnung import wertungen_fuer
codes = {w.code for w in wertungen_fuer(db, ms[0].id)}
assert "erwachsene" in codes and "J 3" in codes
def test_seed_vereins_kurznamen(seed_2026):