feat: show owner info in admin pages
All checks were successful
CI / backend-tests (pull_request) Successful in 29s
CI / frontend-tests (pull_request) Successful in 29s

- Add Owner column to AdminRuns.tsx and AdminGenlockes.tsx
- Add owner filter dropdown to both admin pages
- Add owner field to GenlockeListItem schema (resolved from first leg's run)
- Update frontend types for GenlockeListItem

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-21 13:38:08 +01:00
parent 3bd24fcdb0
commit a3f332f82b
6 changed files with 171 additions and 8 deletions

View File

@@ -28,6 +28,7 @@ from app.schemas.genlocke import (
GenlockeLegDetailResponse,
GenlockeLineageResponse,
GenlockeListItem,
GenlockeOwnerResponse,
GenlockeResponse,
GenlockeStatsResponse,
GenlockeUpdate,
@@ -81,7 +82,9 @@ async def list_genlockes(session: AsyncSession = Depends(get_session)):
result = await session.execute(
select(Genlocke)
.options(
selectinload(Genlocke.legs).selectinload(GenlockeLeg.run),
selectinload(Genlocke.legs)
.selectinload(GenlockeLeg.run)
.selectinload(NuzlockeRun.owner),
)
.order_by(Genlocke.created_at.desc())
)
@@ -91,6 +94,16 @@ async def list_genlockes(session: AsyncSession = Depends(get_session)):
for g in genlockes:
completed_legs = 0
current_leg_order = None
owner = None
# Find first leg (leg_order == 1) to get owner
first_leg = next((leg for leg in g.legs if leg.leg_order == 1), None)
if first_leg and first_leg.run and first_leg.run.owner:
owner = GenlockeOwnerResponse(
id=first_leg.run.owner.id,
display_name=first_leg.run.owner.display_name,
)
for leg in g.legs:
if leg.run and leg.run.status == "completed":
completed_legs += 1
@@ -106,6 +119,7 @@ async def list_genlockes(session: AsyncSession = Depends(get_session)):
total_legs=len(g.legs),
completed_legs=completed_legs,
current_leg_order=current_leg_order,
owner=owner,
)
)
return items