diff --git a/auth.py b/auth.py index 7e2a06e..e313371 100644 --- a/auth.py +++ b/auth.py @@ -211,16 +211,25 @@ def fetch_benutzer_fuer_organisation(organization_id: str) -> list[dict]: """, (organization_id,), ) - return [ - { + ergebnis = [] + for benutzer_id, email, is_superuser, ist_organisationsadmin, created_at in cur.fetchall(): + # psycopg liefert TEXT-Spalten hier teils als bytes zurück, + # nicht deterministisch (dasselbe bekannte Verhalten wie in + # _row_to_user()) - live gefunden, als ein daraus + # weitergereichter bytes-Wert eine spätere SQL-Abfrage mit + # "operator does not exist: text = bytea" zum Absturz brachte. + if isinstance(email, bytes): + email = email.decode("utf-8") + + ergebnis.append({ "id": str(benutzer_id), "email": email, "is_superuser": is_superuser, "ist_organisationsadmin": ist_organisationsadmin, "created_at": created_at, - } - for benutzer_id, email, is_superuser, ist_organisationsadmin, created_at in cur.fetchall() - ] + }) + + return ergebnis router = APIRouter() diff --git a/routers/organisation.py b/routers/organisation.py index af3439b..3da2a6c 100644 --- a/routers/organisation.py +++ b/routers/organisation.py @@ -101,7 +101,14 @@ async def konto_loeschen( if ziel is None: raise HTTPException(status_code=404, detail="Konto wurde nicht gefunden.") - ziel_user = await user_manager.get_by_email(ziel["email"]) + # Über die ID statt per E-Mail nachladen: get_by_email() lief über den + # sync-Verbindungspfad von fetch_benutzer_fuer_organisation() zurück in + # eine async-Abfrage - psycopg liefert TEXT-Spalten dort teils als bytes + # zurück (dasselbe bekannte Verhalten wie bei _row_to_user()), was hier + # zu "operator does not exist: text = bytea" führte (live gefunden bei + # der Verifikation). user_manager.get(id) nutzt ausschließlich den + # async-Pfad (UserDatabase.get(), mit korrektem Decode in _row_to_user()). + ziel_user = await user_manager.get(user_manager.parse_id(konto_id)) await user_manager.delete(ziel_user) return RedirectResponse("/organisation", status_code=303)