Züchter-Editor: Wurfnamen sichtbar, 'undefined Medien' gefixt, Mitgliedschaften & Zertifikate

Rene: 'Züchter sollten mehr Einfluss haben — Wurfnamen (B-Wurf), Mitglied-
schaften und Zertifikate fürs Profil.'

- Wurfnamen: Infrastruktur existierte komplett (wurf_rang/wurf_name in DB,
  Backend, Wurfverwaltungs-Formular) — war nur im Editor und auf der
  öffentlichen Seite unsichtbar. Editor-Karten zeigen jetzt 'B-Wurf · Name'
  (Feldname-Bug geburtsdatum→geburt_datum), öffentliche Wurf-Karten bekommen
  den Rang/Namen als Badge, Hinweis im Editor verlinkt zur Vergabe.
- 'undefined Medien': my-editor lieferte kein foto_count (+photos fürs
  Profil-Grid) — ergänzt.
- NEU Mitgliedschaften & Zertifikate: entity_type 'certificate' im Foto-
  System (Ownership wie breeder), Editor-Sektion mit Upload (Bezeichnung als
  Caption) + Löschen, öffentliche Profilseite zeigt eigene Sektion mit
  Logos/Urkunden (klickbar, lazy). Public-Endpoint liefert result.zertifikate.

Tests: my-editor inkl. Wurfname/foto_count, Zertifikat-Roundtrip bis zur
öffentlichen Seite. Suite: 61 passed.
This commit is contained in:
rene 2026-06-07 21:00:14 +02:00
parent dfffd07a96
commit 5f01abc590
10 changed files with 186 additions and 28 deletions

View file

@ -86,14 +86,14 @@
<title>Ban Yaro</title>
<!-- Theme + theme-color Statusleiste vor CSS setzen -->
<script src="/js/boot-early.js?v=1269"></script>
<script src="/js/boot-early.js?v=1270"></script>
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
<link rel="stylesheet" href="/css/design-system.css?v=1269">
<link rel="stylesheet" href="/css/layout.css?v=1269">
<link rel="stylesheet" href="/css/components.css?v=1269">
<link rel="stylesheet" href="/css/utilities.css?v=1269">
<link rel="stylesheet" href="/css/lists.css?v=1269">
<link rel="stylesheet" href="/css/design-system.css?v=1270">
<link rel="stylesheet" href="/css/layout.css?v=1270">
<link rel="stylesheet" href="/css/components.css?v=1270">
<link rel="stylesheet" href="/css/utilities.css?v=1270">
<link rel="stylesheet" href="/css/lists.css?v=1270">
</head>
<body>
@ -620,11 +620,11 @@
<div id="modal-container"></div>
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
<script src="/js/api.js?v=1269"></script>
<script src="/js/ui.js?v=1269"></script>
<script src="/js/app.js?v=1269"></script>
<script src="/js/worlds.js?v=1269"></script>
<script src="/js/offline-indicator.js?v=1269"></script>
<script src="/js/api.js?v=1270"></script>
<script src="/js/ui.js?v=1270"></script>
<script src="/js/app.js?v=1270"></script>
<script src="/js/worlds.js?v=1270"></script>
<script src="/js/offline-indicator.js?v=1270"></script>
<!-- Feature-Seiten werden lazy geladen -->
@ -634,7 +634,7 @@
<!-- Boot: Offline-Banner + SW-Registration (extrahiert für CSP) -->
<script src="/js/boot.js?v=1269"></script>
<script src="/js/boot.js?v=1270"></script>
</body>