feat: Admin-Endpunkte für Partner-Liste (alle Status) und Ablehnung #4

Merged
andre merged 1 commit from a4/admin-partner-list into main 2026-09-27 09:36:24 +02:00
Owner

Zusammenfassung

Vorbereitung für die ks-crm-Freigabe-UI in kurven-schule-neu-wp: André soll Partner-Bewerbungen direkt aus seinem WordPress-Admin heraus einsehen und freischalten/ablehnen können, statt curl/API von Hand zu bedienen.

  • GET /api/admin/partners (per X-Admin-Key): liefert alle Partner unabhängig vom Status. GET /api/partners (öffentlich) zeigt weiterhin nur status='active' fürs Studio — bewusst getrennt, damit pending Bewerbungen nie öffentlich sichtbar werden. Sortierung: pending zuerst, damit offene Bewerbungen in der Admin-UI oben stehen.
  • POST /api/admin/partners/:id/reject (per X-Admin-Key): Gegenstück zu approve — lehnt eine Bewerbung ab bzw. entzieht die Freigabe (status='revoked'), widerruft aktive Sessions und noch offene Magic-Links (gleiche Widerrufslogik wie bei Re-Approve).
  • Admin-Key-Check aus den drei Admin-Routen in einen gemeinsamen Block extrahiert statt dreifacher Duplikation.

Test plan

  • npm test — 39/39 grün (5 neue Tests: Admin-Liste mit/ohne Key, pending-Sortierung, Reject setzt revoked + widerruft Session, plus Unit-Tests für beide neuen Funktionen)

🤖 Generated with Claude Code

## Zusammenfassung Vorbereitung für die ks-crm-Freigabe-UI in `kurven-schule-neu-wp`: André soll Partner-Bewerbungen direkt aus seinem WordPress-Admin heraus einsehen und freischalten/ablehnen können, statt curl/API von Hand zu bedienen. - `GET /api/admin/partners` (per `X-Admin-Key`): liefert **alle** Partner unabhängig vom Status. `GET /api/partners` (öffentlich) zeigt weiterhin nur `status='active'` fürs Studio — bewusst getrennt, damit pending Bewerbungen nie öffentlich sichtbar werden. Sortierung: `pending` zuerst, damit offene Bewerbungen in der Admin-UI oben stehen. - `POST /api/admin/partners/:id/reject` (per `X-Admin-Key`): Gegenstück zu `approve` — lehnt eine Bewerbung ab bzw. entzieht die Freigabe (`status='revoked'`), widerruft aktive Sessions und noch offene Magic-Links (gleiche Widerrufslogik wie bei Re-Approve). - Admin-Key-Check aus den drei Admin-Routen in einen gemeinsamen Block extrahiert statt dreifacher Duplikation. ## Test plan - [x] `npm test` — 39/39 grün (5 neue Tests: Admin-Liste mit/ohne Key, pending-Sortierung, Reject setzt `revoked` + widerruft Session, plus Unit-Tests für beide neuen Funktionen) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat: Admin-Endpunkte für Partner-Liste (alle Status) und Ablehnung
All checks were successful
Unit & Contract Tests / Node.js Contract Tests (pull_request) Successful in 7s
b31cf4b911
Vorbereitung für die ks-crm-Freigabe-UI (kurven-schule-neu-wp): André
soll Partner-Bewerbungen direkt aus seinem WP-Admin heraus einsehen
und freischalten/ablehnen können, statt curl/API von Hand.

- GET /api/admin/partners (X-Admin-Key): liefert ALLE Partner
  unabhängig vom Status (im Gegensatz zu GET /api/partners, das nur
  status='active' für das öffentliche Studio zeigt). Pending zuerst.
- POST /api/admin/partners/:id/reject (X-Admin-Key): lehnt eine
  Bewerbung ab bzw. entzieht die Freigabe (status='revoked'),
  widerruft Sessions und offene Magic-Links — Gegenstück zu approve.
- Admin-Key-Check aus den drei Admin-Routen in einen gemeinsamen
  Block extrahiert statt dreifacher Duplikation.

39/39 Tests grün (5 neue: Admin-Liste mit/ohne Key, pending zuerst,
Reject setzt revoked + widerruft Session, Unit-Tests für beide
Funktionen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
andre merged commit 0bc89b5f55 into main 2026-09-27 09:36:24 +02:00
andre deleted branch a4/admin-partner-list 2026-09-27 09:36:24 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
andre/kurven-schule-partner!4
No description provided.